我有两个电子表格,SpreadSheetA和SpreadSheetB。
我正在尝试获取SpreadSheetA中所有工作表的名称列表,并将其添加到SpreadSheetB中的活动工作表中。
我已完成代码,但在运行时仍会收到错误消息。
错误消息是“无法将数组转换为对象[] []”以引用行php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations
。
这是我的代码:
range.setValues(sheetNameArray);
答案 0 :(得分:5)
错误消息提示错误:setValues
方法需要"对象[] []"这是一个 double 数组。在Google表格中,所有数据范围都表示为双数组,例如[[1, 2], [3, 4]]
。如果有一行,它仍然是一个双数组:[[1, 2]]
。如果它是一列:[[1], [3]]
。
所以你需要这个额外的数组维度,基本上将每个工作表名称包装在方括号中。这在下面完成,我还使用map
方法处理工作表数组:这比在push
循环中使用for
更清晰,更有效。
function getSheetNamesAndAddToOtherSheet() {
var spreadSheetAURL = "https://docs.google.com/spreadsheets/d/UNIQUE-ID-HERE/edit";
var sheetNameArray = [];
var spreadSheetsInA = SpreadsheetApp.openByUrl(spreadSheetAURL).getSheets();
sheetNameArray = spreadSheetsInA.map(function(sheet) {
return [sheet.getName()];
});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange(1, 1, sheetNameArray.length, 1);
range.setValues(sheetNameArray);
}
答案 1 :(得分:1)
尝试下面的内容......
function getSheetNamesAndAddToOtherSheet() {
var spreadSheetAURL = "https://docs.google.com/spreadsheets/d/UNIQUE-ID-HERE/edit";
var spreadSheetsInA = SpreadsheetApp.openByUrl(spreadSheetAURL).getSheets();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for (var i = 0; i < spreadSheetsInA.length; i++) {
sheet.appendRow([spreadSheetsInA[i].getName()])
}
}