如何使用Google Sheets API读取二维数组?及写入数据报错解决
解决Google Sheets API报错「Invalid values [0][0]」及读取二维数组方法
一、修复「Invalid values [0][0]」错误
这个错误大多是因为传入的单元格值类型不被API接受,或者数据结构写错了。结合你的代码,按下面的步骤排查:
检查
$this->sheetData的结构和内容- 如果你要插入单行数据,
$this->sheetData得是一维数组(比如['姓名', '年龄', '邮箱']),此时你代码里套的外层数组是对的;但如果$this->sheetData本身就是二维数组(多行数据),那现在的写法会变成三维数组,直接导致结构错误。 - 数组里不能有对象、资源这类非基础类型的数据,API只认字符串、数字、布尔值或null。如果有对象,得先转成字符串(比如调用对象的
__toString()方法,或者提取需要的属性值)。
- 如果你要插入单行数据,
修正数据构造代码
如果是单行数据,优化空值和类型处理:$processedRow = array_map(function($nv) { if (is_null($nv)) { return ""; } // 把布尔、对象等类型转成字符串,避免API报错 return is_scalar($nv) ? $nv : (string)$nv; }, $values); $body = new ValueRange([ 'majorDimension' => 'ROWS', 'values' => [$processedRow] // 外层数组代表多行,这里只传一行 ]);如果是多行数据(二维数组),直接处理每一行:
$processedRows = array_map(function($row) { return array_map(function($nv) { return is_null($nv) ? "" : (is_scalar($nv) ? $nv : (string)$nv); }, $row); }, $values); $body = new ValueRange([ 'majorDimension' => 'ROWS', 'values' => $processedRows ]);确认工作表名称正确
检查$range = "Sheet1",确保你的表格里确实有叫「Sheet1」的工作表,如果名称带空格或特殊字符,要加单引号,比如'Sales Data'。
二、用Google Sheets API读取二维数组数据
调用spreadsheets_values->get方法,返回结果里的values字段就是对应表格的二维数组(行×列):
基础读取示例
$client = getClientAuth(); $service = new Sheets($client); $spreadsheetId = "你的表格ID"; // 可以指定具体范围,比如"A1:C10",或者直接写"Sheet1"读取整个工作表 $range = "Sheet1!A1:C10"; $response = $service->spreadsheets_values->get($spreadsheetId, $range); $values = $response->getValues(); // 遍历输出二维数组 if (!empty($values)) { foreach ($values as $row) { // 每一行是一个一维数组,对应表格的一行数据 foreach ($row as $cellValue) { echo $cellValue . " "; } echo "<br>"; } } else { echo "没有找到数据"; }
可选参数调整输出格式
valueRenderOption:控制返回值格式,FORMATTED_VALUE是表格显示的格式化值,UNFORMATTED_VALUE是原始值,FORMULA返回单元格里的公式。dateTimeRenderOption:处理日期时间,SERIAL_NUMBER返回序列值,FORMATTED_STRING返回格式化后的日期字符串。
示例:读取原始值
$params = [ 'valueRenderOption' => 'UNFORMATTED_VALUE', 'dateTimeRenderOption' => 'FORMATTED_STRING' ]; $response = $service->spreadsheets_values->get($spreadsheetId, $range, $params); $values = $response->getValues();
内容的提问来源于stack exchange,提问作者benzi
相关产品推荐
相关产品推荐

