【问题标题】:Google Spreadsheet API : Empty all cells in sheetGoogle Spreadsheet API:清空工作表中的所有单元格
【发布时间】:2016-06-20 18:00:11
【问题描述】:

我们使用 Google Sheet API v4。我们想用空数据清除整个工作表。我们不想删除行/列。

  1. UpdateCells 调用不起作用(通过 API 删除列): developers.google.com
  2. 工作 UpdateCells 调用(所有单元格): developers.google.com

【问题讨论】:

  • 检查我更新的答案。该错误是由于错误的“sheetId”数据造成的。 sheetId 是 gid 参数的值。在我的电子表格中,它是 0。此外,“星号”也有帮助。希望有帮助
  • @Gaurav Ashara 欢迎来到Stack Overflow!如果您发现 noogui 的回答有帮助,请接受。它不仅给予 noogui 荣誉,而且还可以帮助可能需要类似内容的未来读者。

标签: java google-sheets google-spreadsheet-api google-sheets-api


【解决方案1】:

这是电子表格 API 的 Java Quickstart

然后您将使用spreadsheets.batchUpdateclear the sheets。将fields 留空并放置一个星号以指示Sheets API 所有单元格都应为空/清除。 以下正文请求如下所示:

{
  "requests": [
    {
      "updateCells": {
        "range": {
          "sheetId": 0
        },
        "fields": "*"
      }
    }
  ]
}

oauth playground 中快速尝试一下。

更新:现在可以使用了。它清除了我的电子表格。

【讨论】:

  • 其实我们并没有使用app脚本。我们使用了 Google Sheet API v4 for java。
  • 我们得到以下错误 "code": 400, "errors": [ { "domain": "global", "message": "Invalid requests[0].updateCells: 至少一个字段必须列在'fields'中。(使用''表示所有字段。)", "reason": "badRequest" } ], "message": "Invalid requests[0].updateCells: 至少一个字段必须列在'fields'中。(使用''表示所有字段。)", "status": "INVALID_ARGUMENT" }
  • 我有一个等待更新的回复来修复字段参数。我建议您查看 Sheets v4 API 文档中的 Clear a sheet of all values while preserving formats 示例。它准确地回答了你的问题(这个答案基本上是它的复制/粘贴)。
  • 看起来我对答案的编辑没有被接受——答案不正确,因为它说将“字段”参数留空(正如您所指出的那样,API 不允许这样做)。正确的解决方案是将“userEnteredValue”写为字段参数,它告诉 API 仅更新该字段。如果您真的想清除每个字段(根据您的问题,您不想这样做),那么您将使用错误消息告诉您的“*”。
  • @GauravAshara 我已经更新了我的答案。它现在应该可以工作了; )
【解决方案2】:

我可以通过使用记录在案的明确方法 here 查看 rev607 来做到这一点。

ClearValuesRequest clearValuesRequest = new ClearValuesRequest();
// assumes you have a sheetservice initialized 
sheetsService.spreadsheets().values().clear(spreadsheetId, "Sheet1", clearValuesRequest);

没有很好记录的关键见解是,您可以只传递范围的工作表名称,并清除工作表中的所有单元格。

【讨论】:

  • thx,如果调用执行,这将起作用:sheetsService.spreadsheets().values().clear(spreadsheetId, "Sheet1", clearValuesRequest).execute();
【解决方案3】:

我不知道这是否对其他人有帮助,但这就是我让它为我工作的方式: 这应该清除您的整个工作表。 我不记得为什么“sheetId”为 0,但也许它是工作表本身内工作表的索引。 (比如你有标签吗?) 老实说,我不记得了。 该函数希望您传入您的 $service 对象和电子表格 ID。

function clearSheet($service, $spreadsheetID = 0){

$request = new \Google_Service_Sheets_UpdateCellsRequest([
    'updateCells' => [ 
        'range' => [
            'sheetId' => 0 
        ],
        'fields' => "*" //clears everything
    ]
  ]);
$requests[] = $request;

$requestBody = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$requestBody->setRequests($requests);
$response = $service->spreadsheets->batchUpdate($spreadsheetID, $requestBody);
return $response;
}

【讨论】:

  • 哦,是的,这是在我弄清楚如何请求清除整张纸之前。感谢您指出这一点!我将使用用于清除整个工作表的代码对其进行编辑。
  • 根据stackoverflow.com/a/62568335/7020955,新创建的电子表格中的第一个工作表的 ID 为 0,但其他工作表具有随机值。请注意,虽然复制工作表会保留所有工作表 ID。
【解决方案4】:

Java 示例:

        UpdateCellsRequest clearAllDataRequest = new UpdateCellsRequest();
        int allSheetsId = 0;
        String clearAllFieldsSpell = "*";
        GridRange gridRange = new GridRange();
        gridRange.setSheetId(allSheetsId);
        clearAllDataRequest.setRange(gridRange);
        clearAllDataRequest.setFields(clearAllFieldsSpell);
        BatchUpdateSpreadsheetRequest request = new BatchUpdateSpreadsheetRequest();
        Request clearAllDataRequest = new Request().setUpdateCells(clearAllDataRequest);
        request.setRequests(List.of(clearAllDataRequest));
        return request;

【讨论】: