想要通过应用程序脚本与两个不同的Google电子表格中存在的每个单元格进行比较,但要获得错误



我想通过应用程序脚本与两个不同的Google电子表格中存在的每个单元格进行比较,然后更改单元格的背景颜色以显示细胞已更新,但我得到了一个"无法从未定义的"无法读取属性" 0.0。(第16行,文件"代码"("我尝试过opensheetbyname nd获得其范围仍然无法正常工作。谷歌搜索了此错误找不到解决方案这是我的代码

  
function myFunction() {
      var sheet1 = SpreadsheetApp.openById("1-l21-
      2B7KZ5sBaRh9kmUFOyeDyP1Pnp1_IqhVlAJJR0");
      var lastRow = sheet1.getSheetByName("Sheet1").getLastRow();
      var lastCol = sheet1.getSheetByName("Sheet1").getLastColumn();
      var data = sheet1.getDataRange().getValues();
      var sheet2 = 
      SpreadsheetApp.openById("1YOQjiHZXg86XGmFZ0d5noOoLdowc_JFn3wGjICymi_o");
      var lastRow2 = sheet2.getSheetByName("Sheet1").getLastRow();
      var lastCol2 = sheet2.getSheetByName("Sheet1").getLastColumn();
      var data2 = sheet2.getDataRange().getValues();
      for(i = 0; i<=lastRow2; i++){
        for(j = 0; j<=lastCol2; j++){
         if(data[i][j] != data2[i][j]){
           sheet1.getActiveCell().setBackground("#FFFF00");
           }
          }
         }
        }

更新的代码

function myFunction() {
  var sheet1 = SpreadsheetApp.openById("1Ibyd4QbrAhLMSD_GjIQYEwGCYrbtNTbMKF7vRA-Rc9Q").getSheetByName("Sheet1");
  var lastRow = sheet1.getLastRow();
  var lastCol = sheet1.getLastColumn();
  var data = sheet1.getDataRange().getValues();
  var sheet2 = 
  SpreadsheetApp.openById("1YOQjiHZXg86XGmFZ0d5noOoLdowc_JFn3wGjICymi_o");
  var lastRow2 = sheet2.getSheetByName("Sheet1").getLastRow();
  var lastCol2 = sheet2.getSheetByName("Sheet1").getLastColumn();
  var data2 = sheet2.getDataRange().getValues();
  for(i = 3; i<lastRow2; i++){
    for(j = 1; j<lastCol2; j++){
     if(data[i][j] != data2[i][j]){
       sheet1.getRange(i + 1, j + 1).setBackground("#FFFF00");
       }
      }
     }
    }

我还设置了编辑触发器的工作

实际工作表

代码执行表之后

所需结果

datadata2是2维数组。另一方面,在您的情况下,lastRow2lastCol2表示data2数组的长度。这样,当For循环的ij达到lastRow2lastCol2时,发生错误。那么此修改怎么样?

来自:

for(i = 0; i<=lastRow2; i++){
  for(j = 0; j<=lastCol2; j++){

to:

for(i = 0; i < lastRow2; i++){
  for(j = 0; j < lastCol2; j++){

注意:

  • 在您的情况下,datadata2必须是数组的长度相同。请小心。

如果此修改不起作用,您可以向我们展示您的示例表吗?我认为这将有助于考虑解决方案。如果我误解了您的问题,对不起。

编辑1:

有2个零件可修改。在这些修改中,sheet1假设原始表。请按以下方式修改。请输入原始工作表的名称。

1

从 :
var sheet1 = SpreadsheetApp.openById("1-l21-2B7KZ5sBaRh9kmUFOyeDyP1Pnp1_IqhVlAJJR0");
到 :
var sheet1 = SpreadsheetApp.openById("1-l21-2B7KZ5sBaRh9kmUFOyeDyP1Pnp1_IqhVlAJJR0").getSheetByName("### sheet name of original sheet ###");

2

从 :
sheet1.getActiveCell().setBackground("#FFFF00");
到 :
sheet1.getRange(i + 1, j + 1).setBackground("#FFFF00");

编辑2:

function myFunction() {
  var sheet1 = SpreadsheetApp.openById("1Ibyd4QbrAhLMSD_GjIQYEwGCYrbtNTbMKF7vRA-Rc9Q").getSheetByName("Sheet1");
  var lastRow = sheet1.getLastRow();
  var lastCol = sheet1.getLastColumn();
  var data = sheet1.getDataRange().getDisplayValues(); // Modified
  var sheet2 = SpreadsheetApp.openById("1YOQjiHZXg86XGmFZ0d5noOoLdowc_JFn3wGjICymi_o");
  var lastRow2 = sheet2.getSheetByName("Sheet1").getLastRow();
  var lastCol2 = sheet2.getSheetByName("Sheet1").getLastColumn();
  var data2 = sheet2.getDataRange().getDisplayValues(); // Modified
  for(i = 3; i<lastRow2; i++){
    for(j = 1; j<lastCol2; j++){
      if(data[i][j] != data2[i][j]){
        sheet1.getRange(i + 1, j + 1).setBackground("#FFFF00");
      }
    }
  }
}

相关内容

最新更新