使Appen功能工作更快在谷歌谷歌表/



我有一个代码工作良好,但没有优化(我是新的谷歌应用程序脚本)。

这段代码的作用如下:

  • 从外部URL获取数据
  • 过滤数据
  • 解析文件夹
  • 中包含的表格中的数据
  • 更改列标题
  • 在特定列中附加内容
function myfunction() {
var keywords = ["valuetoremove1", "valuetoremove2"]; //  filter the column "C".
// Retrieve CSV data.
var csvUrl = "https://myurl";
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
var csvData = Utilities.parseCsv(csvContent, ";");
// Retrieve Spreadsheet and put the CSV data.
var root = DriveApp.getFoldersByName("Folder1");
while (root.hasNext()) {
var folder = root.next();
var files = folder.getFiles();
while (files.hasNext()) {
var spreadsheet = SpreadsheetApp.open(files.next());
var name = spreadsheet.getName().toUpperCase();
var values = csvData.reduce((ar, r) => {
if (!keywords.some(e => r[2].toUpperCase().includes(e.toUpperCase())) && r.join("").toUpperCase().includes(name)) {
ar.push(r);
}
return ar;
}, []);
if (values.length == 0) continue;
var sheet = spreadsheet.getSheets()[0];
sheet.clearContents().getRange(2, 1, values.length, values[0].length).setValues(values);
// modify column titles
var cell = sheet.getRange(1,1);
cell.setValue("Column1");
var cell = sheet.getRange(1,2);
cell.setValue("Column2");
var cell = sheet.getRange(1,3);
cell.setValue("Column3");
var cell = sheet.getRange(1,4);
cell.setValue("Column4");
var cell = sheet.getRange(1,5);
cell.setValue("Column5");
// Modify column E
var dataRange = spreadsheet.getDataRange().getValues();
var colData = [];
for (var i = 1; i < dataRange.length; i++) {
colData.push(dataRange[i][0]);
}
for (var i = 0; i < colData.length; i++) {
// Get column E
var comments_cell = spreadsheet.getDataRange().getCell(i + 2, 5).getValue();
// Append
spreadsheet.getDataRange().getCell(i + 2, 5).setValue('<a href="' + comments_cell + '" target="_blank"><button type="button">Button</button></a>');
}
}
}
}

它工作,但它花了很长时间,特别是最后一部分,一行一行地改变。有什么办法可以让它更快吗?

感谢

Try (after// Modify column E)

var dataRange = spreadsheet.getDataRange().getValues()
for (var i = 1; i < dataRange.length; i++) {
// Get column E
var comments_cell = dataRange[i][4];
dataRange[i][4] = '<a href="' + comments_cell + '" target="_blank"><button type="button">Button</button></a>'
}
spreadsheet.getDataRange().setValues(dataRange)