【问题标题】:How to duplicate a sheet in google spreadsheet api如何在谷歌电子表格 api 中复制工作表
【发布时间】:2017-09-27 08:46:12
【问题描述】:

我使用下面的代码来做到这一点。

BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();

DuplicateSheetRequest requestBody = new DuplicateSheetRequest();
requestBody.setNewSheetName("test");
requestBody.setSourceSheetId(sheetId);

Sheets sheetsService = createSheetsService();

batchUpdateSpreadsheetRequest.set("duplicateSheet", requestBody);
Sheets.Spreadsheets.BatchUpdate request =  sheetsService.spreadsheets().
batchUpdate(spreadsheetId,batchUpdateSpreadsheetRequest);
BatchUpdateSpreadsheetResponse response = request.execute();

执行此操作时,出现以下错误。

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid JSON payload received. Unknown name \"duplicate_sheet\": Cannot find field.",
    "reason" : "badRequest"
  } ],
  "message" : "Invalid JSON payload received. Unknown name \"duplicate_sheet\": Cannot find field.",
  "status" : "INVALID_ARGUMENT"
}

我在这里做错了什么?创建工作表副本的正确方法是什么?

【问题讨论】:

    标签: java google-spreadsheet-api


    【解决方案1】:

    通过遵循google documentation 的类似内容,我已经设法克服了这个问题。下面是我使用的代码。

    BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new 
    BatchUpdateSpreadsheetRequest();
    
    List<Request> requests = new ArrayList<>();
    
    DuplicateSheetRequest requestBody = new DuplicateSheetRequest();
    requestBody.setNewSheetName("test");
    requestBody.setSourceSheetId(sheetId);
    
    requests.add(new Request().setDuplicateSheet(requestBody));
    
    Sheets sheetsService = createSheetsService();
    
    batchUpdateSpreadsheetRequest.setRequests(requests);
    Sheets.Spreadsheets.BatchUpdate request =
                sheetsService.spreadsheets().batchUpdate(spreadsheetId, batchUpdateSpreadsheetRequest);
    
    BatchUpdateSpreadsheetResponse response = request.execute();
    

    【讨论】:

    • 你能分享一下这个php吗?
    【解决方案2】:

    这是创建工作表副本的PHP 版本,以备不时之需:

    //Assuming you already have a $spreadsheet
    $spreadsheetId = $spreadsheet->spreadsheetId;
    $body = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
        'requests' => array(
            'duplicateSheet' => array(
                'sourceSheetId' => 0, //Source sheet id goes here as an integer
                'insertSheetIndex' => 1, //Position where the new sheet should be inserted
                'newSheetName' => 'test' //Set new name if you want
            )
        )
    ));
    $spreadsheet = $service->spreadsheets->batchUpdate($spreadsheetId, $body);
    

    【讨论】:

      最近更新 更多