使用Invoke-RestMethod调用Google API追加表格数据遇400错误求助
问题根源与解决方法
你的核心问题是Google Sheets API的values字段格式错误:API要求values是二维数组(外层是行集合,内层是每行的单元格值集合),但你传入的是键值对哈希表,API无法识别Field1这类键名,因此返回400错误。
修正步骤
1. 调整请求体结构
把values从哈希表改成二维数组,按表格列的顺序(A到F)传入值,不需要带字段名:
$body = @{ range = 'SheetName!A1:F195'; values = @( @('Test', 'Test', 'Test', 'Test', 'Test', 'https://test.com') ); };
- 外层
@()表示行的集合,这里是一行数据,所以只包含一个数组 - 内层
@()是该行的单元格值,顺序要和表格A-F列完全对应
2. 补充必要的请求参数
追加数据时,建议在请求URL中指定valueInputOption参数(默认是RAW,如果需要解析公式或格式可以用USER_ENTERED),同时可以简化range的写法,不用指定到F195,直接指定列范围更灵活:
# 简化请求URL,指定valueInputOption参数 $requestUri = "https://sheets.googleapis.com/v4/spreadsheets/$SpreadsheetID/values/SheetName!A:F:append?valueInputOption=RAW"
3. 完整修正代码
$SpreadsheetID = "你的表格ID" $accessToken = "你的有效AccessToken" # 简化并修正请求URL $requestUri = "https://sheets.googleapis.com/v4/spreadsheets/$SpreadsheetID/values/SheetName!A:F:append?valueInputOption=RAW" # 修正后的请求体,values为二维数组 $body = @{ values = @( @('Test', 'Test', 'Test', 'Test', 'Test', 'https://test.com') ); }; # 转换为JSON,注意指定Depth避免嵌套截断 $test = ConvertTo-Json -InputObject $body -Depth 3 # 发送请求 $response = Invoke-RestMethod -Headers @{Authorization = "Bearer $accessToken"} -Uri $requestUri -Method POST -ContentType 'application/json' -Body $test
额外说明
range参数可以进一步简化为SheetName:append,API会自动识别表格的有效数据范围并追加到末尾- 如果需要追加多行数据,只需在
values的外层数组中添加更多内层数组即可:values = @( @('Test1', 'Test1', 'Test1', 'Test1', 'Test1', 'https://test1.com'), @('Test2', 'Test2', 'Test2', 'Test2', 'Test2', 'https://test2.com') );
内容的提问来源于stack exchange,提问作者EvenThis
相关产品推荐
相关产品推荐

