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);
}
配列を「転置」する必要があります。これを行うには、新しい配列を作成し、値を1つの値を持つ配列として追加します。
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);
値の設定関数には、入力として行列が必要です。ネイティブ行列がないため、各サブ配列が同じ長さで配列を含まない配列の配列が必要です。
「マトリックス」内の各配列は行であり、各配列の各要素は列に入ります。
1次元配列から1列の行が必要な場合は、1要素配列の配列が必要です。列を記述したい場合は、すべての値の1つの配列を含む配列を作成します。
シートから受け取るアイテムは不変であるため、それらに追加することはできませんが、値を新しい配列にコピーして、古い配列を上書きすることはできます。しかし、私はこの問題に対して別のアプローチを取り、次のように列の最後に印刷しました。
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.
}