4

配列の内容をあるシート (ユーザーが選択した列の選択項目を反復してプッシュすることによって配列が作成される) から別のスプレッドシートの別のシートにコピーしようとしています。

あるスプレッドシートから別のスプレッドシートに範囲をインポートする方法について、いくつかの質問と回答に出くわしましたが、どれもうまくいきませんでした (すべて「申し訳ありませんが、サーバー エラーが発生しました。しばらくお待ちください」というエラーが返されます)。もう一度やり直してください。」)「copyTo」も試しましたが、成功しませんでした。

ここに私が現在使用しているコードがあります。どこで間違ったのですか??

function copyToTrix(featureList) {

  featureList = featureList.getValues();

  var tss = SpreadsheetApp.openById("0AtX9IYFZ..."); //define active trix as target 

var ts = tss.getSheetByName("US");          //define sheet in target trix

var newRange = ts.getRange("DA12:DA25");    //define target range

 newRange.setValues(featureList);  //set values in target range to items in featureList

Browser.msgBox('copied');
}
4

6 に答える 6

4

配列の内容ではなく、あなたの決定のみに依存するため、非常に危険な方法でターゲット範囲を定義しました...常に機能するこの方法を使用できます。

var beginning_row = 12;
var beginning_col = /*what ever corresponds to 'DA' */ ;
var newRange = ts.getRange(beginning_row, beginning_col, featureList.length, featureList[0].length);    //define target range

配列の長さから行数を取得し(実際にはそうです)、最初の要素の長さから列数を取得します(同じコメント)...非常に簡単で信頼性があります;-)

また、あなたが自分自身に与えた答えは間違っています(申し訳ありませんが、個人的な攻撃ではありません...)。ドキュメントの「ベストプラクティス」の章に記載されている内容とは正反対であり、削除することをお勧めしますその「回答済みマーク」と賛成票。

于 2012-09-08T07:49:42.997 に答える
1

私はここで誰かの一部を使用しています。このコードは私のために働いています。

function CopyRange() {
 var sss = SpreadsheetApp.openById('spreadsheetid'); //replace with source ID
 var ss = sss.getSheetByName('sheetname'); //replace with source Sheet tab name
 var range = ss.getRange('A2:G50'); //assign the range you want to copy
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('SpreadsheetID'); //replace with destination ID
 var ts = tss.getSheetByName('sheetname2'); //replace with destination Sheet tab name

 ts.getRange(ts.getLastRow()+1, 1,49,7).setValues(data); //you will need to define the size of the copied data see getRange()

}


このコードは、範囲 A2:G50 を取得し、利用可能な最後の行の sheetname2 にコピーされます。たとえば、シート 2 の最初の行が行 11 で使用できる場合、このコードは情報を行 11 に貼り付けます。

于 2017-02-19T21:25:16.337 に答える
0

copyTo と setValues の両方が機能します。コードで使用しています。

エラーを生成する行を見つけます - ログ、またはトライアンドキャッチ。

または、このようなものを追加してください-手がかりが得られるかどうかを確認してください

// The code below will set the values for range A1:D2 to the values in an array.
var myTable = [[1, 2, 3, 4],[5, 6, 7, 8]];
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1,1,2,4).setValues(myTable);
于 2012-09-06T05:14:05.233 に答える
-2

GAS が setValues() 関数で問題を抱えていることがわかりました。全範囲を取得するのにうまくいかなかったため、代わりに setValue() を使用する必要がありました。(値を設定すると、一度に 1 つのセルでのみ操作できます):

var tss = SpreadsheetApp.openById("0AtX9IYFZ9KkbdHg4TUdqYVppTTU5OENpb04tWTdNbHc");
var ts = tss.getSheetByName("US");
for (var i = 0; i < featureList.length; i++) {
var position = i + 12;
ts.setActiveCell("B" + position).setValue(featureList[i]);
于 2012-09-08T01:37:37.903 に答える