我编写了一个代码,将信息从条目表传输到数据表, 问题是条目表中的发票可能包含 100 行要转移, 当我尝试这种方式时,当用户写入超过 10 行时,程序会变得更慢。
function Entry() {
var SS=SpreadsheetApp.getActiveSpreadsheet();
var EE=SS.getSheetByName("entry");
var DataSheet=SS.getSheetByName("data");
var Blankrow=DataSheet.getLastRow()+1;
var Blankrow2=DataSheet.getLastRow()+2;
var Blankrow3=DataSheet.getLastRow()+3;
var Blankrow4=DataSheet.getLastRow()+4;
var EE2=EE.getRange("D6").getValue();
var EE3=EE.getRange("D7").getValue();
var EE4=EE.getRange("D8").getValue();
DataSheet.getRange(Blankrow,1).setValue(EE.getRange("D3").getValue());
DataSheet.getRange(Blankrow,2).setValue(EE.getRange("F3").getValue());
DataSheet.getRange(Blankrow,3).setValue(EE.getRange("D5").getValue());
DataSheet.getRange(Blankrow,4).setValue(EE.getRange("E5").getValue());
DataSheet.getRange(Blankrow,5).setValue(EE.getRange("G5").getValue());
if(EE2!=""){
DataSheet.getRange(Blankrow2,1).setValue(EE.getRange("D3").getValue());
DataSheet.getRange(Blankrow2,2).setValue(EE.getRange("F3").getValue());
DataSheet.getRange(Blankrow2,3).setValue(EE.getRange("D6").getValue());
DataSheet.getRange(Blankrow2,4).setValue(EE.getRange("E6").getValue());
DataSheet.getRange(Blankrow2,5).setValue(EE.getRange("G6").getValue());
}
if(EE3!=""){
DataSheet.getRange(Blankrow3,1).setValue(EE.getRange("D3").getValue());
DataSheet.getRange(Blankrow3,2).setValue(EE.getRange("F3").getValue());
DataSheet.getRange(Blankrow3,3).setValue(EE.getRange("D7").getValue());
DataSheet.getRange(Blankrow3,4).setValue(EE.getRange("E7").getValue());
DataSheet.getRange(Blankrow3,5).setValue(EE.getRange("G7").getValue());
}
if(EE4!=""){
DataSheet.getRange(Blankrow4,1).setValue(EE.getRange("D3").getValue());
DataSheet.getRange(Blankrow4,2).setValue(EE.getRange("F3").getValue());
DataSheet.getRange(Blankrow4,3).setValue(EE.getRange("D8").getValue());
DataSheet.getRange(Blankrow4,4).setValue(EE.getRange("E8").getValue());
DataSheet.getRange(Blankrow4,5).setValue(EE.getRange("G8").getValue());
}
EE.getRange("D3").clearContent();
EE.getRange("H3").clearContent();
EE.getRange("J3").clearContent();
EE.getRange("D5:D23").clearContent();
EE.getRange("E5:E23").clearContent();
EE.getRange("G5:G23").clearContent();
}
我想要一种让代码运行得更快的方法。
我相信您的目标如下。
DataSheet.getRange(Blankrow,1).setValue(EE.getRange("D3").getValue());
。clearContent()
的范围始终是"D3", "H3", "J3", "D5:E23", "G5:G23"
的常数。既然如此,下面的修改如何?
function Entry2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet = ss.getSheetByName("entry");
var dstSheet = ss.getSheetByName("data");
var srcLastRow = srcSheet.getLastRow();
var [[d3, , f3], , ...srcValues] = srcSheet.getRange("D3:G" + srcLastRow).getValues();
var temp = Array(5).fill(null);
var dstValues = srcValues.map(([d, e, , g]) => d.toString() ? [d3, f3, d, e, g] : temp);
if (dstValues.length == 0) return;
dstSheet.getRange(dstSheet.getLastRow() + 1, 1, dstValues.length, dstValues[0].length).setValues(dstValues);
srcSheet.getRangeList(["D3", "H3", "J3", "D5:E23", "G5:G23"]).clearContent();
}
if(EE2!="")
为 false 时,var Blankrow2=DataSheet.getLastRow()+2
的行为空。我通过反思修改了你的脚本。