JS/GAS: For循环加速从电子表格单元格复制,用value替换文档占位符

JS/GAS: For loop to speed up copy from spreadsheet cell, replace document placeholder with value?

本文关键字:复制 value 替换 占位符 文档 单元格 电子表格 GAS For 循环 加速      更新时间:2023-09-26

我使用的是Google App Script。我有一个电子表格,上面有关于能源审计员访问的建筑物的问题。审核员被要求将他们对电子表格问题的答案放在特定的单元格中。然后他们可以使用我编写的脚本来生成更正式的Google Document报告。报告通过以下步骤生成:审计员输入答案的每个单元格都是一个定义的范围。例如,假设单元格B10在电子表格中定义为"buildingAddress"。审计员被要求在单元格中输入建筑地址——假设他输入"55 Sample Drive, Portland"。当审计员单击生成Document报告时,脚本运行以下几行:

var buildingAddress = sheet.getRangeByName('buildingAddress').getValue(); copyBody.replaceText("<buildingAddress>", buildingAddress);

我的(文档文件)报告模板中的占位符是<buildingAddress>。因此,代码在报告模板中找到该值,并将其替换为"55 Sample Drive, Portland"——审计员输入到电子表格单元格中的值。

不幸的是,我需要从电子表格中拉出很多这样的单元格值,并将其推送到报告文档中的占位符。它们都符合这个结构:

var buildingAddress = sheet.getRangeByName('buildingAddress').getValue(); 
  copyBody.replaceText("<buildingAddress>", buildingAddress);

所以,我想知道,我可以实现相同的结果,但使用更少的代码通过使用数组和for循环??假设数组是这样的:

var array = ["buildingAddress", "buildingOwner", "auditorName"];

如何设置for循环??

谢谢! !

循环不会给你带来收益,除了代码更简洁。

调试它并查看慢的部分在哪里(参见关键步骤的执行记录或日志)。

例如,如果通过名称获取一个区域很慢,并且所有命名的区域都是连续的,那么为这些单元格创建一个命名的区域。获取范围(将返回数组)并从中获取值。这使得一个单一的"get range"调用取代了你现在的N个。

从你的"如何写一个循环"的问题,似乎你刚刚开始编程。我建议一个教程和更多的实践,stackoverflow假设你知道这些基础。

谢谢!如果有人感兴趣,这是我的方法。我创建了一个字符串对象数组。每个字符串都是与电子表格中定义的范围相同的文本。然后我使用这个for循环:

for(var i = 0; i < simpleCopyReplaceArray.length; i++){
var definedRangeCellName = simpleCopyReplaceArray[i];
var cellValue = ss.getRangeByName(definedRangeCellName).getValue();
var placeHolder = "<" + definedRangeCellName + ">";
if( cellValue != ""){
  copyBody.replaceText(placeHolder, cellValue);
}else{
  copyBody.replaceText(placeHolder, "");}

}