我想通过应用程序脚本与两个不同的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");
}
}
}
}
我还设置了编辑触发器的工作
实际工作表
代码执行表之后
所需结果
data
和 data2
是2维数组。另一方面,在您的情况下,lastRow2
和lastCol2
表示data2
数组的长度。这样,当For循环的i
和j
达到lastRow2
和lastCol2
时,发生错误。那么此修改怎么样?
来自:
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++){
注意:
- 在您的情况下,
data
和data2
必须是数组的长度相同。请小心。
如果此修改不起作用,您可以向我们展示您的示例表吗?我认为这将有助于考虑解决方案。如果我误解了您的问题,对不起。
编辑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");
}
}
}
}