我有一个包含近 160 个子工作表的 Google 工作表。所有问题都在“全部”表中,B 列是它们应该在的实际电子表格名称。以下代码正在从“所有”电子表格中读取数据并将它们完美地发送到所需电子表格的最后一行,但这需要很长时间!可能是因为它有很多子表并且一次又一次地使用 getSheetByName。现在,我将所有子工作表的名称和 ID 一次存储在“工作表”和“工作表 ID”数组中。我正在考虑比较rangeValues[j][1]和sheetNames[k][0]。以下是电子表格的代码和屏幕截图。
这是合适的方式吗?请帮助我更快地运行脚本!
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("All");
var rangeData = sheet.getDataRange();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(1,1, lastRow, 8);
var curr_sheet;
function send() {
var rangeValues = searchRange.getValues();
var sheetNames = new Array();
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i<sheets.length ; i++) sheetNames.push( [ sheets[i].getName() ] );
//Logger.log (sheetNames.length);
var sheetID = new Array();
var sheetIDs = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i<sheetIDs.length ; i++) sheetID.push( [ sheetIDs[i].getSheetId() ] );
//Logger.log (sheetID.length);
for ( j = 0 ; j < lastRow; j++)
{
for ( k = 0 ; k < sheetNames.length ; k++) //
{
if (rangeValues[j][1] === sheetNames[k][0])
{
var targetSheet = ss.getSheetByName(sheetNames[k][0]); // This line is working but taking very long to complete
var targetSheet = ss.getSheetByID(sheetIDs[k][0]); // This line is not code just to show what I'm thinking to do.
targetSheet.getRange(targetSheet.getLastRow()+1, 1, 1, 8).setValues([rangeValues[j]]);
}
}
}
}
