在Google Apps脚本中覆盖电子表格

时间:2013-06-11 05:21:56

标签: google-apps-script google-sheets

我想在每次执行脚本(GAS)时打开一个新的电子表格。不幸的是,SpreadsheetApp.create()不断创建具有相同名称的同一文件的“多个”副本。如何覆盖驱动器上已存在的文件内容?

3 个答案:

答案 0 :(得分:4)

您可以使用SpreadsheetApp.create()制作具有指定名称的新电子表格文件,但没有接受文件名的等效SpreadsheetApp.open()函数。正如您所发现的那样,.create()始终创建一个新文件 - 它不关心具有该名称的文件是否已存在。

如果要打开文件名以打开电子表格,则需要先找到该文件,然后将File Object传递给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);
  }
};

答案 1 :(得分:1)

您可能正在寻找Sheet.clear()

删除内容和格式here的选项很少。

答案 2 :(得分:1)

使用最新版本的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;
}