replaceText中的逗号(Google Script)

时间:2014-07-18 12:10:00

标签: google-apps-script google-sheets google-docs

我正在编写一个脚本,在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]+"");
} 

您对如何避免它有什么建议吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

你是(错误)使用getValues()方法,它将返回一个二维数组(单元格行)。如果我们在for循环中暂停执行,这就是我们在内存中的内容:

debugger

请注意tagcontent是数组数组。 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]+"");
}