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 回答