web-dev-qa-db-ja.com

スプレッドシートのコピーを作成して特定のフォルダに保存するにはどうすればよいですか?

私はGoogle App Scriptを使用しています。私は。。をしようとしています:

  1. スプレッドシートのコピーを作成する
  2. コピーに特定のファイル名を付けます。
  3. 特定のフォルダに保存します。

以下のコードは機能するはずですが、機能しません。これはdoesタスク1と3を実行します。つまり、コピーを作成し、そのコピーを目的のフォルダーに保存します。ただし、指定したファイル名のファイルは保存されません。代わりに、「[元のスプレッドシートファイル名]のコピー」として保存されます。これを行うために、私は File#makeCopy

(注:この質問は以前に回答されたことは知っていますが、GoogleがDocListサービスを廃止して以来、回答されていないと思います。)

この簡略化されたMCVEを作成したところ、期待どおりに動作することがわかりました。

function saveAsSpreadsheet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxx");
  DriveApp.getFileById(sheet.getId()).makeCopy("desired file name", destFolder);
} //END function saveAsSpreadsheet

しかし、私の元のコードはそうではありません-コピーの名前が間違っています:

function saveAsSpreadsheet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var buildingNameAddress = sheet.getRangeByName('buildingNameAddress').getValue();
  Logger.log(buildingNameAddress); //Logs correct string
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxxx");
  DriveApp.getFileById(sheet.getId()).makeCopy(buildingNameAddress, destFolder);
}
14
Jeff

これは私のために働いたあなたの機能のための修正されたコードです。メソッドsetNamedRangeを使用して名前を付けた名前付き範囲を設定していませんでした。それと、範囲の値を取得していた変数名をTestRangeに変更します。また、getValue()は1つの値しか取得しませんが、値の範囲が必要なため、代わりにgetValues()を使用しました。しかし、残りのコードは問題なく、完全に機能しました。

function saveAsSpreadsheet(){ 
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange('Sheet1!A1:B3');
  sheet.setNamedRange('buildingNameAddress', range);
  var TestRange = sheet.getRangeByName('buildingNameAddress').getValues(); 
  Logger.log(TestRange); 
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxx"); 
  DriveApp.getFileById(sheet.getId()).makeCopy("Test File", destFolder); 
}
13
pointNclick