我刚写了我的第一个Google Apps脚本,从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));
};
};
}
格式更新:
如果您需要了解如何使用字体或背景颜色来格式化输出,请查看此后续问题。希望您能从这些专业人士的建议中受益 :)