我正在编写一个脚本,在Google电子表格中使用值数组并填充Google文档。一切都在使用body.replaceText。 唯一的问题是Google文档中的文字最后会以逗号显示。
所以,如果我有
%AREA_2% text here
%AREA_3% text here
%AREA_4% text here
在文档中显示:text here,
(使用逗号)
var tag = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var content = sheet.getRange(1, 2, sheet.getLastRow(), 2).getValues();
for (var i in tag){
body.replaceText(tag[i], content[i]+"");
}
您对如何避免它有什么建议吗? 谢谢!
答案 0 :(得分:1)
你是(错误)使用getValues()
方法,它将返回一个二维数组(单元格行)。如果我们在for
循环中暂停执行,这就是我们在内存中的内容:
请注意tag
和content
是数组数组。 tag
中的三个子数组各有一个元素,而content
中的三个子数组有两个。
所以在这一行...
body.replaceText(tag[i], content[i]+"");
...我们有一个期望两个String参数的方法。 Javascript引擎尝试(并成功)提供它们,即使tag[i]
和content[i]
都不是字符串开头。这称为type coercion。
tag[0]
的情况非常简单;单个元素数组被解释为一个字符串,没有明显的副作用。
content[0]
怎么样?它是一个包含"text here"
和""
的空格字符串的双元素数组。通过将元素连接在一起,用逗号分隔,数组强制。这就是你看text here,
的原因。 (你会得到与content[i].join()
相同的结果。)
快速解决方法是更正用于阅读content
的索引:
var content = sheet.getRange(1, 2, sheet.getLastRow(), 1).getValues();
^^^
或者,我们可以确保代码与数据结构匹配,并避免完全依赖强制:
var tag = 0, content = 1; // Column indices
var tagset = sheet.getRange(1, 1, sheet.getLastRow(), 2).getValues();
for (var i in tagset){
body.replaceText(tagset[i][tag], tagset[i][content]+"");
}