如何通过Google Sheets API删除DataValidationRule

时间:2019-02-21 22:16:47

标签: php google-sheets google-sheets-api

目前,我正在通过其PHP库使用Google Sheets API来构建动态电子表格。我已经在电子表格上设置了验证规则,专门用于创建要选择的状态的下拉列表。

此后,我更新了电子表格,使其状态下拉列表位于其他列中。但是,执行此操作后,似乎仍在为上一列设置的DataValidationRule仍然存在。

我尝试创建一种方法,以便在重新应用我想要的任何验证之前从工作表中删除所有验证,但是它似乎无法正常工作。

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/other#conditiontype

设置条件类型时,我想将验证恢复为CONDITION_TYPE_UNSPECIFIED,但是如果这样做,API只会返回一个错误。我尝试使用其他ONE_OF_LIST,但随后每个单元格都显示错误:

Invalid: Input must be an item on specified list

考虑到没有生成列表(这也不是我想要的),这很有道理。

其余各列可以是数字/日期/文本的任意组合,因此我想在再次应用验证之前简单地删除所有验证。

这是我当前的clearValidation代码:

public function clearSpreadsheetValidations($spreadsheetId) {
    $client = $this->getClient();
    $service = new Google_Service_Sheets($client);

    $conditions = new Google_Service_Sheets_BooleanCondition();
    $conditions->setType('CONDITION_TYPE_UNSPECIFIED');
    $conditions->setValues(null);

    $setRule= new Google_Service_Sheets_DataValidationRule();
    $setRule->setCondition($conditions);
    $setRule->setInputMessage(null);
    $setRule->setShowCustomUi(false);

    $valReq = new Google_Service_Sheets_SetDataValidationRequest();
    $valReq->setRule($setRule);

    $sheetReq = new Google_Service_Sheets_Request();
    $sheetReq->setSetDataValidation($valReq);

    $requestBody = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
    $requestBody->setRequests($sheetReq);

    $service->spreadsheets->batchUpdate($spreadsheetId, $requestBody);
}

如何调用表格API来删除电子表格中所有先前设置的DataValidationRules?

谢谢!

2 个答案:

答案 0 :(得分:0)

好的,如此处所述

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request

SetDataValidationRequest

  

为范围中的每个单元格设置数据验证规则。清除   在范围内进行验证,请在不指定规则的情况下调用它。

因此,我所要做的只是不声明范围或设置规则,而是在现有电子表格上运行此方法以清除所有现有验证

public function clearSpreadsheetValidations($spreadsheetId) {
    $client = $this->getSheetsClient();
    $service = new Google_Service_Sheets($client);
    $valReq = new Google_Service_Sheets_SetDataValidationRequest();
    $sheetReq = new Google_Service_Sheets_Request();
    $sheetReq->setSetDataValidation($valReq);

    $requestBody = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
    $requestBody->setRequests($sheetReq);

    $service->spreadsheets->batchUpdate($spreadsheetId, $requestBody);
}

答案 1 :(得分:0)

对于Java,此代码在我的情况下有效。

public BatchUpdateSpreadsheetResponse removeAllDataValidation(String spreadsheetId, Sheets service)
        throws IOException {
    // [START sheets_conditional_formatting]
    List<Request> requests = Arrays.asList(new Request().setSetDataValidation(
            new SetDataValidationRequest()));

    BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests);
    BatchUpdateSpreadsheetResponse result = service.spreadsheets().batchUpdate(spreadsheetId, body).execute();
    System.out.printf("%d cells updated.", result.getReplies().size());
    // [END sheets_conditional_formatting]
    return result;
}