20

Google Apps Scriptを使用して、あるスプレッドシートから別のスプレッドシートに特定の行をコピーしたかったのです。

誰かが私がこれに対する答えを得るのを手伝ってくれませんか。

4

7 に答える 7

26

注: この解決策は、同じスプレッドシート内のあるシートから別のシートに行をコピーする場合に機能しますが、シートから別のスプレッドシートに行をコピーする場合には機能しません。

ここでドキュメントをチェックしてください:

http://code.google.com/googleapps/appsscript/service_spreadsheet.html

コピー元のスプレッドシートで作業していると仮定しましょう。

現在のスプレッドシートと対象のスプレッドシートへのハンドルを取得する必要があります。対象のスプレッドシートの ID を取得する必要があります。詳細はリンク先にあります。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("abc1234567");

次に、これらのスプレッドシート内の特定のシートを選択する必要があります。行が「New Stuff」という名前のシートにあり、「Archive」という名前のターゲット スプレッドシートにシートがあるとします。

var source_sheet = ss.getSheetByName("New Stuff");
var target_sheet = target.getSheetByName("Archive");

さて、Google アプリのスプレッドシートが使用する概念は範囲です。範囲は単なるセルの塊です。そのため、from-range と to-range を決定する必要があります。シートに 7 列あり、10 行目が必要だとします。

var source_range = source_sheet.getRange("A10:G10");
var target_range = target_sheet.getRange("A1:G1");

その行を取得して、ターゲット シートの最初の行に配置します。実際のコピーは次のとおりです。

source_range.copyTo(target_range);

そして、あなたは完了です!

これで、常にターゲット シートの最初の行が上書きされます。それを止めるためにできることはたくさんあります。常に最初の行を使用する代わりに、シート オブジェクトのメソッドを使用して最後の行を見つけ、後に 1 行追加してから範囲として使用することができます。

var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));

そうすれば、行をコピーするたびに、シートの下部に追加されます。

于 2011-01-26T20:03:23.383 に答える
23

別のスプレッドシートのシートに内容をコピーできないため、このcopyTo方法は十分に文書化されていません。

以下のようなgetValuesansを使用することができます。setValues

function CopyDataToNewFile() {
  var sss = SpreadsheetApp.openById('0AjN7uZG....'); // sss = source spreadsheet
  var ss = sss.getSheetByName('Monthly'); // ss = source sheet
  //Get full range of data
  var SRange = ss.getDataRange();
  //get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();
  //get the data values in range
  var SData = SRange.getValues();

  var tss = SpreadsheetApp.openById('8AjN7u....'); // tss = target spreadsheet
  var ts = tss.getSheetByName('RAWData'); // ts = target sheet
  //set the target range to the values of the source data
  ts.getRange(A1Range).setValues(SData);

}  
于 2012-07-26T19:31:45.630 に答える
10

私もこれに遭遇しました。あるシートから別のシートにすべてをコピーする素晴らしい回避策を見つけることができました (画像、グラフ、スクリプトなどを除く)。数式、値、書式設定を確実にコピーします。

基本的に解決策は

  • ソース シートを一時ソース シートとしてターゲット スプレッドシートにコピーする
  • 一時ソース シートからターゲット シートにデータをコピーする
  • 一時ソース シートを削除します

コード:

var sss = SpreadsheetApp.openById(spreadsheet); // sss = source spreadsheet
var ss = sss.getSheetByName(sheet); // ss = source sheet
var ss_temp = ss.copyTo(targetsheet);
var tss = SpreadsheetApp.openById(spreadsheet); // tss = target spreadsheet
var ts = tss.getSheetByName(sheet); // ts = target sheet
var range2Copy = ss_temp.getRange(range);
range2Copy.copyTo(ts.getRange(range));
bss.setActiveSheet(ss_temp);
bss.deleteActiveSheet()

上記に基づいて、マスター スプレッドシートから多数のコピーを更新できるスプレッドシートを作成しました。約 15 のコピーで、多くのコピペ操作を節約できます。

于 2012-05-07T16:56:12.083 に答える
1

もう 1 つの方法は、行 (または任意の範囲) をソースからターゲット スプレッドシートにインポートすることです。

「source-spreadsheet-sheet-name」というソース スプレッドシートのシートから行 3 をインポートすると仮定すると、ターゲットの場所の最初の列に次の式を入力します。

=IMPORTRANGE("source-spreadsheet-key","source-spreadsheet-sheet-name!3:3")

"source-spreadsheet-key"、URL から抽出したソース スプレッドシートの一意の ID です。

初めて行う場合は、セキュリティ メッセージが表示されます。

ここに画像の説明を入力

確認するだけで、行全体が自動的に入力されます。

ソース領域で変更が行われた後、インポートされたセルを更新するのに数分かかる場合があることに注意してください。ただし、対象のスプレッドシートにアクセスしているときにctrl-Eまたはctrl-shift-Eを押すと、速度を上げることができます。

于 2015-02-11T16:17:54.063 に答える
0

たぶん、この投稿はhttp://l.rw.rw/gscripts3に役立ちます。さまざまな条件でのコピー機能の機能について説明します (範囲によるデータの制限、カスタム フィルター、挿入または置換メソッドによるターゲットへのデータの配置)。そして、あなたがそれを試すことができる実際の例があります。

于 2013-10-24T08:30:54.063 に答える