GASで、ある2次元配列を別のシートにコピーしたいのですが、
下記のようにすると、値のみのペーストで、式がコピーできません。
javascript
1x = ss.getSheetByName('シート名1').getDataRange().getValues().filter(array => array[1] === 'キーワード1'); 2y = ss.getSheetByName('シート名2'); 3 4 const copySheet = function (x, y) { 5 let lastColumn = x[0].length; //列数取得 6 let lastRow = x.length; //行数取得 7 y.getRange(2, 1, lastRow, lastColumn).setValues(x); 8 }
copyToを使って書き直したところgetValueのところでエラーになります。
javascript
1x = ss.getSheetByName('シート名1').getDataRange().getValues().filter(array => array[1] === 'キーワード1'); 2y = ss.getSheetByName('シート名2'); 3 4 const copySheet = function (x, y) { 5 let lastColumn = x[0].length; 6 let lastRow = x.length; 7 8//2次元配列 x の値がうまく取得できない。 9 getValues(x).copyTo(y.getRange(2, 1, lastRow, lastColumn), SpreadsheetApp.CopyPasteType.PASTE_NO_BORDERS, false); 10 }
どのようにすれば、二次元配列を取得できるのでしょうか。。。
上の let y = ... とは何ですか?
それがcopySheet(x, y)のyに来るのなら、そもそもRangeオブジェクトじゃないですよね。
なぜ y.getRange ができるのですか?
すいません。 変数 x,yの記述が不適切のようです。本来の記述に近いかたちに記載しなおしました。
xからyにコピーしたいんですよね。
でも、console.log(x); してみればわかると思いますが、xはRangeオブジェクトからgetValues()しちゃってるから、そもそも値しか持っていないのでは?
そうです!
値しかもっていない場合は、どんなメソッドつかったらいいのでしょうか。。setValues()が使えたので単純に逆のgetもいけるだろうと考えたのですが、、
たとえば =B3+B4 というのが入っているセルは、計算結果(たとえばB3が2でB4が3なら5)がコピーされるのではなくて、そのまま =B3+B4 としてコピーしたいわけですよね?
それなら xxx.copyTo(yyy) です。xxx は Rangeオブジェクトでなければなりません。
ありがとうございます。根本的に関数の作り方が悪そうですね。。この関数はコールバック関数として別の関数に使っており、変数 x をRangeオブジェクトに変える、、というのは避けたいので。そもそもの構成をイチから見直してみます。
回答1件
あなたの回答
tips
プレビュー