You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Google Sheets API读取二维数组?及写入数据报错解决

解决Google Sheets API报错「Invalid values [0][0]」及读取二维数组方法

一、修复「Invalid values [0][0]」错误

这个错误大多是因为传入的单元格值类型不被API接受,或者数据结构写错了。结合你的代码,按下面的步骤排查:

  1. 检查$this->sheetData的结构和内容

    • 如果你要插入单行数据,$this->sheetData得是一维数组(比如['姓名', '年龄', '邮箱']),此时你代码里套的外层数组是对的;但如果$this->sheetData本身就是二维数组(多行数据),那现在的写法会变成三维数组,直接导致结构错误。
    • 数组里不能有对象、资源这类非基础类型的数据,API只认字符串、数字、布尔值或null。如果有对象,得先转成字符串(比如调用对象的__toString()方法,或者提取需要的属性值)。
  2. 修正数据构造代码
    如果是单行数据,优化空值和类型处理:

    $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
    ]);
    
  3. 确认工作表名称正确
    检查$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:37:01