【问题标题】:Want to compare to values of each cell present in two different google spreadsheet via app script but get error想通过应用脚本比较两个不同谷歌电子表格中每个单元格的值,但出现错误
【发布时间】:2018-12-12 00:26:03
【问题描述】:

我想通过应用脚本比较两个不同谷歌电子表格中每个单元格的值,并更改单元格的背景颜色以显示单元格已更新,但我得到一个 “无法从未定义中读取属性“0.0”。(第 16 行,文件“代码”)” 我已经尝试过 opensheetbyname 并得到它的范围仍然无法正常工作。谷歌搜索此错误未找到解决方案 这是我的代码

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");
       }
      }
     }
    }

我还设置了编辑触发器以使其工作

Actual Sheet

After Code Execution Sheet

Desired Result

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

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

    发件人:

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

    收件人:

    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");
          }
        }
      }
    }
    

    【讨论】:

    • 对不起,这张表是机密的。因此,我不能给你看这张纸,但我想告诉你关于这张纸的一件事是,两张纸都是彼此的精确副本,就像备份纸一样。背后的想法是,我制作了一张备份表来比较旧值和新值(如果我们办公室里有人编辑了这张表)。因此,如果对特定单元格进行任何编辑,其颜色将在原始工作表中更改以告知其已更新。
    • 另外我将在稍后设置触发器,一周后新更新的工作表将被备份以替换旧备份,并且所有更改的颜色都将恢复,以便可以再次显示工作表更新下周。通过这种方式,我想到了突出显示对工作表所做的任何更新。另外,稍后我将致力于制作一个自动更新列,该列仅在一个地方显示最新更新,例如仅在电子表格中的新提要
    • 我尝试了你的建议。错误消失了,但只有 A1 单元格变为黄色,即使它是空白的
    • @Ankit Aggarwal 对于给您带来的不便,我深表歉意。并感谢您提供更多信息。我可以理解您问题中的错误已被删除。但是,很遗憾,我无法理解您的下一个问题。为了了解你的情况,我可以问你一下吗?在您的脚本中,sheet1 和 sheet2 分别扮演什么角色? but only A1 cell turned yellow even if it was blank我无法理解这个意思。您能向我们展示您的样品表以进行测试吗?当然,这不是机密的。这将有助于思考解决方案。我很抱歉我的英语不好。
    • 你不需要说对不起亲爱的感谢你的帮助。我的工作表很正常,就像您创建一个新的空白电子表格并填写一些数据然后制作电子表格的精确副本并开始比较任何更改的值。应用您的提示后,我的代码开始工作,但它没有改变不同值的背景颜色。请参阅代码末尾使用的“if”语句。如果任何工作表中同一单元格的值不匹配,则执行命令以更改颜色
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多