我试图将addArray []的数据立即附加到A列的末尾。但是,我的数组不是多维的,无法使用此方法:
这是我添加到数组的方式:
var toAdd=[];
var thisurl="red apple http://awebsite.com/1.jpg";
toAdd.push(thisUrl);
这就是我想一次追加数组的方式
function AddToSpreadsheet()
{
var data = SpreadsheetApp.getActiveSheet().getRange('A12:A').getValues();
var toAdd=["red apple http://awebsite.com/1.jpg",
"green apple http://1awebsite.com/2.jpg",
"red apple http://1awebsite.com/3.jpg",
"rotten apple http://rottenApple.com"];
if(toAdd.length > 0){
for(i = 0; i < data.length; ++i){
if(data[i][0] == ""){break;}
}
SpreadsheetApp.getActiveSheet().getRange(12+i, 1, toAdd.length, 1).setValues(toAdd);
}
}
如果我使用上面的代码,我会收到此错误:
Cannot convert Array to Object[][]. (line
我的addArray不是多维数组!我如何将它转换为多维数组,如下例所示我可以使用上面的代码?
多维数组示例:
var toAdd=[["red apple http://awebsite.com/1.jpg"],
["green apple http://1awebsite.com/2.jpg"],
["red apple http://1awebsite.com/3.jpg"],
["rotten apple http://rottenApple.com"]];
编辑:我在开始时转换了数组并且工作了!
var values_array=["red apple http://awebsite.com/1.jpg",
"green apple http://1awebsite.com/2.jpg",
"red apple http://1awebsite.com/3.jpg",
"rotten apple http://rottenApple.com"];
var toAddArray = [];
for (i = 0; i < toAdd.length; ++i){
toAddArray.push([toAdd[i]]);
}
...........
这样我将整个新数组插入到A列:
............
SpreadsheetApp.getActiveSheet().getRange(12+i, 1, toAddArray.length, 1).setValues(toAddArray);
}
答案 0 :(得分:6)
你需要&#34;转置&#34;数组。 您可以通过创建一个新数组并将值附加为具有一个值的数组来实现。
在调用setValues(toAdd)之前尝试
var toAddArray = [];
for (i = 0; i < toAdd.length; ++i){
toAddArray.push([toAdd[i]]);
}
用
替换设定值调用 SpreadsheetApp.getActiveSheet().getRange(12+i, 1, toAdd.length, 1).setValues(toAddArray);
设定值功能需要矩阵作为输入。由于没有原生矩阵,因此需要一个数组数组,其中每个子数组具有相同的长度且不包含数组 &#34;矩阵中的每个数组&#34;是一行,每个数组的每个元素都进入一列 如果您想要一维数组中的一列行,则需要一个具有单元素数组的数组。如果要编写列,则创建一个包含所有值的数组的数组。
答案 1 :(得分:2)
您从表格中收到的项目是不可变的,这就是您无法附加到它们的原因,但是您可以将值复制到新数组中并覆盖旧数组。但是,我会采用另一种方法解决这个问题,并将其打印到列的末尾,如下所示:
function appendToSheet() {
var sheet = SpreadsheetApp.getActive().getSheetByName('test'); // Get sheet so I don't have to retype it every time
var toAppend = [['Append 1'],['Append 2']]; // Note that this is an array of arrays.
var newRow = sheet.getLastRow() + 1; // This fetches the number of the last row of the entire sheet and adds one to it.
var endRange = lastRow + toAppend.length - 1; // Calculate the last row to append to
sheet.getRange('A' + newRow + ':A' + endRange).setValues(toAppend); // Write to sheet.
}
但是如果你想在你的代码中使用工作表数组和附加数据我会这样做,我动态计算我需要的范围,只获取它,而不是获取整个工作表并使用的是:
function appendToValues() {
var sheet = SpreadsheetApp.getActive().getSheetByName('test');
var lastRow = sheet.getLastRow();
var valuesFromSheet = sheet.getRange('A1:A' + lastRow).getValues(); // Get values from the sheet
var toAppend = [['value 1'],['value 2']];
var newArray = valuesFromSheet.concat(toAppend); // .concat() copies the old immutable array and makes a new one with the append array included.
}