问题描述
我正在尝试从Google表格中提取一系列名称,并将其放入Google文档中。在电子表格中,姓氏(“ lastNames”)位于姓氏(“ firstNames”)之前,并且两者都是在单独的列中。我正在尝试将名字和名字一起放在我的文档中。
我使用了for循环将名字和姓氏放到一个数组中(“ fullNames”),该部分效果很好。当我使用Logger.log时,所有的名字和姓氏都放在一个数组中,每个全名都用一个公用名隔开,就像我希望的那样。
我不知道该怎么做,实际上是将这个新数组插入文档主体中。我正在使用appendTable方法,但是每次尝试出现以下错误:“参数(number [])与DocumentApp.Body.appendTable的方法签名不匹配。”
要真正将新数组放入Google文档中,我需要对代码进行哪些更改?
function namePusher() {
var ss = SpreadsheetApp.openById("1CHvnejDrrb9W5txeXVMXxBoVjLpvWSi40ehZkGZYjaY");
var lastNames = ss.getSheetByName("Campbell").getRange(2,2,18).getValues();
var firstNames = ss.getSheetByName("Campbell").getRange(2,3,18).getValues();
//Logger.log(firstNames);
var fullNames = [];
for(var i = 0; i < firstNames.length; i++){
var nameConcat = firstNames[i] + " " + lastNames[i]
fullNames.push(nameConcat);
}
//Logger.log(fullNames);
var doc = DocumentApp.getActiveDocument().getBody();
doc.appendTable(fullNames);
}
解决方法
修改点:
- 我认为您的问题有两个原因。
- 由
getValues()
检索的值是二维数组。 -
appendTable(data)
必须是二维数组。- 在脚本中,
fullNames
是一维数组。这样,就会发生这种错误。
- 在脚本中,
data
中的 - 由
- 在脚本中,使用2
getValues()
在2列中检索值。在这种情况下,成本会变得有点高。您可以使用一个getValues()
来检索值。
当这些要点反映到脚本中时,它如下所示。
修改后的脚本:
function namePusher() {
var ss = SpreadsheetApp.openById("1CHvnejDrrb9W5txeXVMXxBoVjLpvWSi40ehZkGZYjaY");
var values = ss.getSheetByName("Campbell").getRange("B2:C19").getValues(); // Modified
var fullNames = [];
for(var i = 0; i < values.length; i++){ // Modified
var nameConcat = [values[i][1] + " " + values[i][0]]; // Modified
fullNames.push(nameConcat);
}
var doc = DocumentApp.getActiveDocument().getBody();
doc.appendTable(fullNames);
}
参考文献:
,修复代码的一种简单方法是替换
fullNames.push(nameConcat);
作者
fullNames.push([nameConcat]);
脚本的问题是fullNames
是字符串数组,但是您应该传递 Array 的字符串数组 >(或可能被强制转换为字符串的对象)。
基本演示
var data = [
['A','B','C'],[1,'Apple','Red'],[2,'Banana','Yellow']
];
function myFunction() {
const doc = DocumentApp.getActiveDocument();
const body = doc.getBody();
body.appendTable(data);
}
如Tanaike's answer所述,还有其他“改进机会”
- 减少对Google Apps脚本类和方法的调用次数
- 使用更好的方法来管理数组和连接字符串。