使用google drive api复制工作表

时间:2013-05-21 10:17:25

标签: google-apps-script google-sheets google-drive-api

我正在尝试使用Google Apps脚本复制/复制工作表。这可能吗?我无法在API文档中找到任何此类调用的引用。 https://developers.google.com/google-apps/spreadsheets/

2 个答案:

答案 0 :(得分:1)

很抱歉,据我所知,没有这方面的功能。 Google应用脚本可以执行此操作。

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

我这样做的代码是用Java编写的,但要分割出你需要的东西并不容易。

答案 1 :(得分:1)

您可以使用部署为网络应用的Google Apps脚本。 使用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>