0

スクリプト(GAS)が実行されるたびに新しいスプレッドシートを開きたいです。残念ながら、 SpreadsheetApp.create() は、同じファイルの「複数の」コピーを同じ名前で作成し続けます。ドライブに既に存在するファイルの内容を上書きするにはどうすればよいですか?

4

3 に答える 3

4

を使用して、特定の名前の新しいスプレッドシート ファイルを作成できますが、ファイル名を受け入れるSpreadsheetApp.create()同等の関数はありません。SpreadsheetApp.open()あなたが見つけた.create()ように、常に新しいファイルを作成します-その名前のファイルが既に存在するかどうかは気にしません。

ファイル名を開いてスプレッドシートを開く場合は、最初にそのファイルを見つけてから、ファイル オブジェクトを に渡す必要がありますSpreadsheetApp.open()

このユーティリティ関数は、既存のスプレッドシートを開くか、そのようなファイルが存在しない場合は作成します。

/**
 * Returns the Spreadsheet with the given file name. If no such spreadsheet
 * exists, it will be created.
 */
function openSheetByName(filename) {
  if (arguments.length == 0 || filename =="") throw new Error( "Missing filename." );

  var files = DocsList.getFilesByType('spreadsheet');
  var sheet;
  var i = 0;
  // Loop over all spreadsheet files. Loop ends when we reach the end,
  // or if we find a matching filename.
  while ( i < files.length && (files[i].getName() !== filename) )
    i++;

  if (i == files.length) {
    // We didn't find the file, so create it.
    sheet = SpreadsheetApp.create(filename);
  }
  else {
    // We found it, use it.
    sheet = SpreadsheetApp.open(files[i]);
  }
  return sheet;
}

readRows()次に、ユーティリティ関数を使用する例の修正版を示します。

function readRows() {
  var sheet = openSheetByName("Favourite");

  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    Logger.log(row);
  }
};
于 2013-06-11T16:12:05.107 に答える
2

Google Apps サービスの最新バージョンでは、既存のシートを開くために @Mogsdad によって提供されたスクリプトを変更して、既存のシートを開くか、存在しない場合は新しいシートを作成することができます。

/**
* Returns the Spreadsheet with the given file name. If no such spreadsheet
* exists, it will be created.
*/
function openSheetByName(filename) 
{
    if (arguments.length == 0 || filename =="") throw new Error( "Missing filename." );

        var files = DriveApp.getFilesByName(filename);
        var sheet;
        // Check we found a sheet with the name
        while ( files.hasNext())
        {
            sheet = files.next();
            if(sheet.getName() == filename)
            {
                Logger.log("Opened Sheet: " + filename);
                return SpreadsheetApp.open(sheet);
            }
       }

      // We didn't find the file, so create it.
      sheet = SpreadsheetApp.create(filename);
      Logger.log("Created new Sheet for: " + filename);
      return sheet;
}
于 2015-06-18T00:48:27.233 に答える
1

あなたはおそらくSheet.clear()を探しています。

コンテンツを削除してフォーマットするためのオプションはほとんどありませ

于 2013-06-11T06:42:41.043 に答える