1

我正在尝试使用谷歌应用程序脚本复制/复制工作表。有可能这样做吗?我无法在 API 文档中找到此类调用的任何参考。https://developers.google.com/google-apps/spreadsheets/

4

2 回答 2

1

抱歉,据我所知,没有功能可以做到这一点。谷歌应用脚​​本会做到这一点。

我是手动的。我创建了一个新工作表并复制了公式/数据。但是如果你在你的公式中使用 $ 会出现错误,读取工作正常,但写入很痛苦,因为某些公式,例如 A$1 引用不会写入工作表(因为错误)。所以你需要将它们切换到A1。你也不能复制字体/颜色等。

我的代码是用 Java 编写的,但不容易拆分出你需要的部分。

于 2013-05-24T00:33:28.423 回答
1

您可以使用部署为网络应用程序的谷歌应用程序脚本。使用 HTTP GET 调用 Web 应用程序以传输电子表格 ID、要复制的工作表的名称和新工作表的名称。这是我使用的脚本:

function doGet(e) {

  // get parameter from request (GET HTTP method)
  var spreadsheetID = e.parameter.spreadsheetID;
  var targetName = e.parameter.targetName;
  var sourceSheetName = e.parameter.sheetName;

  var response = copyWorksheet(spreadsheetID, sourceSheetName, targetName);

  return ContentService.createTextOutput(response);
}


function copyWorksheet(spreadsheetID, templateName, sheetName){

    // if there is a spreadsheet ID, find the spreadsheet with this ID
    if(typeof spreadsheetID == "string"){
      spreadsheet = SpreadsheetApp.openById(spreadsheetID);
    }else{
      return "failure; the spreadsheet " + spreadsheetID + " was not found";
    }

    // if there is a template name, find the worksheet with this name and set it as the active sheet;  (if there is no name provided, the active worksheet is duplicated)
    if(typeof templateName == "string"){
      template = spreadsheet.getSheetByName(templateName);
      if(template != null)
        spreadsheet.setActiveSheet(template);
    }

    // duplicate active sheet and set the new sheet as the active sheet
    newSheet = spreadsheet.duplicateActiveSheet();

  // rename the sheet
    if(typeof sheetName == "string"){
      sheetName.setName(sheetName);
    }

  return "success;" + sheetName + ";";
}

将此脚本附加到任何电子表格并进行部署。调用它使用:

<scriptURL>?spreadsheetID=<spreadsheetID>&targetName=<targetName>&templateName=<sourceSheetName>
于 2013-06-25T14:33:22.960 回答