目前,我正在通过其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?
谢谢!
答案 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;
}