2

注意点として、私はGoogleAppsスクリプティングに非常に慣れていません。私は提供できるどんな援助にも感謝します。

シートの内容を新しいドキュメントにコピーしようとしています。このコードは問題なく機能します。

// Create a new Spreadsheet and copy the current sheet into it.
var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
var projectname = SpreadsheetApp.getActiveSpreadsheet();
sheet = originalSpreadsheet.getActiveSheet();
sheet.copyTo(newSpreadsheet);

ただし、これは現在のシートから数式をコピーします。数式は元のドキュメントの他のシートのデータを参照しているため、値のみをコピーしようとしています。

これを行うための私の試みは次のとおりです。

// Create a new Spreadsheet and copy the current sheet into it.
var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
var projectname = SpreadsheetApp.getActiveSpreadsheet();
sheet = originalSpreadsheet.getActiveSheet();
sheet.copyTo(newSpreadsheet, {contentsOnly:true})

ただし、これにより次のエラーが生成されます。メソッド(class)copyTo($ Proxy914、object)が見つかりません。

何が間違っているのかわかりません。どんな援助もいただければ幸いです。前もって感謝します!

4

2 に答える 2

6

実際には2copyToつあり、1つはシートに適用され、もう1つは範囲に適用されます

ドキュメント(上記のリンクを参照)によると、2番目の引数には値をコピーするオプションの引数がありますが、最初の引数にはありません。

を使用してRange.copyTo()、シート範囲全体を(同じスプレッドシート内の)一時シートにコピーしてから、その一時シートを別のスプレッドシートにコピーし、最後にソーススプレッドシートから一時シートを削除することができます。

それが十分に明確であることを願っています;-)

于 2013-02-13T23:12:36.853 に答える
0

スクリプトギャラリーには、spreadsheetFrozenBackupというスクリプトがあり、これを使用してスプレッドシートのコピーを作成できます。

Sergeがほのめかしているrange.copyToが使用されます。

長いスクリプトではないので、ここで情報を再現します。

// Make copy of current spreadsheet with backup name.                  
function spreadsheetFrozenBackup() {

  // Get current spreadsheet.
  var ss = SpreadsheetApp.getActiveSpreadsheet();                     

  // Name the backup spreadsheet with date.
  var bssName = ss.getName() + " frozen at " + Utilities.formatDate(new Date(), "GMT", "yyyyMMdd HHmmss");
  var bs = SpreadsheetApp.openById((DocsList.copy(DocsList.getFileById(ss.getId()), bssName)).getId());

  // Make sure all the formulae have been evaluated...                     
  SpreadsheetApp.flush();

  // Get all the sheets in the spreadsheet
  var bsl = bs.getSheets();    

  var pl = "";
  for (var i = 0; i < bsl.length; i++) {
    bsl[i].getDataRange().copyTo(bsl[i].getDataRange(), {contentsOnly:true});

    pl = pl + " " + bsl[i].getName();
    SpreadsheetApp.getActiveSpreadsheet().toast(pl, "Processed Sheets");
  }  
  SpreadsheetApp.getActiveSpreadsheet().toast(bssName, "Frozen Backup");
}
于 2013-02-14T01:27:58.960 に答える