我刚刚编写了我的第一个谷歌应用程序脚本,从 VBA 移植而来,它格式化了一列客户订单信息(感谢您的指导)。
描述:
该代码通过 - 前缀标识州代码,然后将以下名字与姓氏(如果存在)组合在一起。然后在姓氏所在的位置写下“订单完成”。最后,如果订单之间没有间隙,它会插入一个必要的空白单元格(见下图)。
问题:
问题是处理时间。它无法处理更长的数据列。我被警告说
方法 Range.getValue 被脚本大量使用。
现有优化:
根据对这个问题的回答,我尝试将尽可能多的变量保留在循环之外,并且还改进了我的 if 语句。@MuhammadGelbana 建议只调用 Range.getValue 方法一次并移动它的值......但我不明白这将/可能如何工作。
代码:
function format() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var lastRow = s.getRange("A:A").getLastRow();
var row, range1, cellValue, dash, offset1, offset2, offset3;
//loop through all cells in column A
for (row = 0; row < lastRow; row++) {
range1 = s.getRange(row + 1, 1);
//if cell substring is number, skip it
//because substring cannot process numbers
cellValue = range1.getValue();
if (typeof cellValue === 'number') {continue;};
dash = cellValue.substring(0, 1);
offset1 = range1.offset(1, 0).getValue();
offset2 = range1.offset(2, 0).getValue();
offset3 = range1.offset(3, 0).getValue();
//if -, then merge offset cells 1 and 2
//and enter "Order complete" in offset cell 2.
if (dash === "-") {
range1.offset(1, 0).setValue(offset1 + " " + offset2);
//Translate
range1.offset(2, 0).setValue("Order complete");
};
//The real slow part...
//if - and offset 3 is not blank, then INSERT CELL
if (dash === "-" && offset3) {
//select from three rows down to last
//move selection one more row down (down 4 rows total)
s.getRange(row + 1, 1, lastRow).offset(3, 0).moveTo(range1.offset(4, 0));
};
};
}
格式更新:
有关使用字体或背景颜色格式化输出的指导,请在此处查看此后续问题。希望您能从这些专业人士给我的建议中受益:)