调用Google Sheets API batchUpdate时updateCells的setFields字段无效报错问询
报错原因
- PHP语法层面的
mixed类型只表示PHP代码层面对传入参数的类型没有限制,不代表Google Sheets API服务端对参数的业务逻辑没有校验规则,你传的无意义字符串aaaaaaaaaaaaaaaaaaaaaaaaaaaa不符合API的参数要求。 Google_Service_Sheets_UpdateCellsRequest的setFields方法接收的是Google API标准的字段掩码(FieldMask),作用是指定你需要修改单元格的哪项属性,只能传入API预定义的单元格属性字段名,不能自定义任意字符串。- 你之前查阅的是
GridRange类的文档,setFields属于UpdateCellsRequest类的方法,查错了文档自然找不到对应的参数说明。
解决方案
根据你要修改的单元格属性,替换setFields的参数为合法的字段掩码即可,常见合法取值如下:
- 仅修改单元格内容:
userEnteredValue - 仅修改单元格格式(字体、颜色、对齐等):
userEnteredFormat - 同时修改内容和格式:
userEnteredValue,userEnteredFormat - 修改单元格备注:
note - 覆盖更新单元格所有属性:
*(不推荐,未手动设置的属性会被重置为默认值)
示例代码(给指定单元格写入文本内容)
// 构造要写入的单元格内容 $cellData = new Google_Service_Sheets_CellData(); $cellData->setUserEnteredValue(new Google_Service_Sheets_ExtendedValue([ 'stringValue' => '需要写入的文本' ])); $range1 = new Google_Service_Sheets_GridRange(); $range1->setStartRowIndex(92); $range1->setEndRowIndex(93); // GridRange为左闭右开区间,修改第93行(0开始计数第92位)需设置end为93 $range1->setStartColumnIndex(4); $range1->setEndColumnIndex(5); // 列索引同理左闭右开 $range1->setSheetId(1433074761); $request1 = new Google_Service_Sheets_UpdateCellsRequest(); $request1->setFields('userEnteredValue'); // 替换为合法的字段掩码 $request1->setRange($range1); $request1->setRows([new Google_Service_Sheets_RowData([ 'values' => [$cellData] ])]); $body1 = new Google_Service_Sheets_Request(); $body1->setUpdateCells($request1); // 第二个请求按照同样规则修改setFields参数即可 $request2 = new Google_Service_Sheets_UpdateCellsRequest(); $request2->setFields('userEnteredValue'); // 其余$request2、$body2逻辑和你原有逻辑一致 $batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(); $batchUpdateRequest->setRequests([$body1, $body2]);
内容的提问来源于stack exchange,提问作者user11092881
相关产品推荐
相关产品推荐

