google-apps-script 多个条件覆盖 headers
google-apps-script multiple criteria writing over headers
我从 Serge 那里获取了一些很棒的脚本(原始 link here。我添加了第二个条件来排除某些行并且效果很好,除非没有 header 在被复制到的 sheet 中,它将不起作用(错误:"The coordinates or dimensions of the range are invalid."),如果我输入 header 或其他一些数据,它会覆盖它。有人可以帮忙吗?我还发现与我从未定义的消息 "TypeError: Cannot read property "length" 得到的条件不匹配。"
此外,我需要进行哪些更改才能将单元格 'dataSheetLog[i][12]' 更改为状态变量,即在我复制它之后 "COPIED"。我试过写一个 setValue 行,但它显然是该语法的错误指令。
代码是:
{
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetLog = Spreadsheet.getSheetByName("LOG");
var sheetMaint = Spreadsheet.getSheetByName("MAINTENANCE");
var Alast = sheetLog.getLastRow();
var criteria = "08 - Maintenance"
var status = "COPIED"
var dataSheetLog = sheetLog.getRange(2,1,Alast,sheetLog.getLastColumn()).getValues();
var outData = [];
for (var i in dataSheetLog) {
if (dataSheetLog[i][2]==criteria && dataSheetLog[i][12]!=status){
outData.push(dataSheetLog[i]);
}
}
sheetMaint.getRange(sheetMaint.getLastRow(),1,outData.length,outData[0].length).setValues(outData);
}
在:
sheetMaint.getRange(sheetMaint.getLastRow(),1,outData.length,outData[0].length).setValues(outData);
getLastRow() 指的是最后占用的行,应该,getLastRow() + 1,
避免覆盖你的 headers 和其他问题。
已编辑:
{
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetLog = Spreadsheet.getSheetByName("LOG");
var sheetMaint = Spreadsheet.getSheetByName("MAINTENANCE");
var Alast = sheetLog.getLastRow(); // Log
var criteria = "08 - Maintenance"
var status = "COPIED"
var dataSheetLog = sheetLog.getRange(2,1,Alast,sheetLog.getLastColumn()).getValues(); //Log
var dataSheetLogStatusRange = sheetLog.getRange(2,13,Alast,1); //Log
var dataSheetLogStatus = dataSheetLogStatusRange.getValues(); //Log
var outData = [];
for (var i =0; i < dataSheetLog.length; i++) {
if (dataSheetLog[i][2]==criteria && dataSheetLog[i][12]!=status){
outData.push(dataSheetLog[i]);
dataSheetLogStatus[i][0] = "COPIED";
}
}
if(outData.length > 0) {
sheetMaint.getRange(sheetMaint.getLastRow() + 1,1,outData.length,outData[0].length).setValues(outData);
dataSheetLogStatusRange.setValues(dataSheetLogStatus);
}
}
}
what change would I need to make to change the cell
'dataSheetLog[i][12]' to the status variable, i.e. "COPIED" after I
have copied it across.
您试图更新从 sheet 而不是 sheet 本身提取的数组中的值。由于数组是从零开始的,而 spreadsheets 不是,要转换,必须将 +1 添加到数组行和列索引。我假设状态在您的 sheet.
的 M 列中
我从 Serge 那里获取了一些很棒的脚本(原始 link here。我添加了第二个条件来排除某些行并且效果很好,除非没有 header 在被复制到的 sheet 中,它将不起作用(错误:"The coordinates or dimensions of the range are invalid."),如果我输入 header 或其他一些数据,它会覆盖它。有人可以帮忙吗?我还发现与我从未定义的消息 "TypeError: Cannot read property "length" 得到的条件不匹配。"
此外,我需要进行哪些更改才能将单元格 'dataSheetLog[i][12]' 更改为状态变量,即在我复制它之后 "COPIED"。我试过写一个 setValue 行,但它显然是该语法的错误指令。
代码是:
{
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetLog = Spreadsheet.getSheetByName("LOG");
var sheetMaint = Spreadsheet.getSheetByName("MAINTENANCE");
var Alast = sheetLog.getLastRow();
var criteria = "08 - Maintenance"
var status = "COPIED"
var dataSheetLog = sheetLog.getRange(2,1,Alast,sheetLog.getLastColumn()).getValues();
var outData = [];
for (var i in dataSheetLog) {
if (dataSheetLog[i][2]==criteria && dataSheetLog[i][12]!=status){
outData.push(dataSheetLog[i]);
}
}
sheetMaint.getRange(sheetMaint.getLastRow(),1,outData.length,outData[0].length).setValues(outData);
}
在:
sheetMaint.getRange(sheetMaint.getLastRow(),1,outData.length,outData[0].length).setValues(outData);
getLastRow() 指的是最后占用的行,应该,getLastRow() + 1,
避免覆盖你的 headers 和其他问题。
已编辑:
{
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetLog = Spreadsheet.getSheetByName("LOG");
var sheetMaint = Spreadsheet.getSheetByName("MAINTENANCE");
var Alast = sheetLog.getLastRow(); // Log
var criteria = "08 - Maintenance"
var status = "COPIED"
var dataSheetLog = sheetLog.getRange(2,1,Alast,sheetLog.getLastColumn()).getValues(); //Log
var dataSheetLogStatusRange = sheetLog.getRange(2,13,Alast,1); //Log
var dataSheetLogStatus = dataSheetLogStatusRange.getValues(); //Log
var outData = [];
for (var i =0; i < dataSheetLog.length; i++) {
if (dataSheetLog[i][2]==criteria && dataSheetLog[i][12]!=status){
outData.push(dataSheetLog[i]);
dataSheetLogStatus[i][0] = "COPIED";
}
}
if(outData.length > 0) {
sheetMaint.getRange(sheetMaint.getLastRow() + 1,1,outData.length,outData[0].length).setValues(outData);
dataSheetLogStatusRange.setValues(dataSheetLogStatus);
}
}
}
what change would I need to make to change the cell 'dataSheetLog[i][12]' to the status variable, i.e. "COPIED" after I have copied it across.
您试图更新从 sheet 而不是 sheet 本身提取的数组中的值。由于数组是从零开始的,而 spreadsheets 不是,要转换,必须将 +1 添加到数组行和列索引。我假设状态在您的 sheet.
的 M 列中