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

PHP中通过getByDataFilter按工作表名筛选获取Google Sheets单元格格式

获取Google Sheets指定工作表单元格格式的PHP示例

问题背景

我有一个包含多个工作表的大型复杂Google表格,需要获取其中部分工作表所有单元格的格式(如字体颜色)。使用spreadsheets->get并添加includeGridData参数时:

$sheetMeta = $service->spreadsheets->get($spreadsheetId,['includeGridData' => true]);

请求会超时或耗尽资源,因此尝试用getByDataFilter按工作表筛选,但以下代码报错:

$body= json_encode(array('data_filters' => [], 'include_grid_data'=>true));
$response = $service->spreadsheets->getByDataFilter($spreadsheetId, $body);

错误信息:

Expected parameter of type 'Google\Service\Sheets\GetSpreadsheetByDataFilterRequest'


正确实现代码

Google Sheets PHP API要求getByDataFilter方法的第二个参数必须是GetSpreadsheetByDataFilterRequest实例,而非JSON字符串或数组。以下是完整的可运行示例:

// 初始化请求对象
$request = new Google\Service\Sheets\GetSpreadsheetByDataFilterRequest();

// 构建要筛选的工作表数据过滤器数组
$dataFilters = [];

// 示例1:按工作表名称筛选(比如筛选"Sheet1"和"Sheet2")
// 第一个工作表筛选器
$sheetFilter1 = new Google\Service\Sheets\SheetDataFilter();
$sheetFilter1->setSheetName("Sheet1");
$filter1 = new Google\Service\Sheets\DataFilter();
$filter1->setSheetFilter($sheetFilter1);
$dataFilters[] = $filter1;

// 第二个工作表筛选器
$sheetFilter2 = new Google\Service\Sheets\SheetDataFilter();
$sheetFilter2->setSheetName("Sheet2");
$filter2 = new Google\Service\Sheets\DataFilter();
$filter2->setSheetFilter($sheetFilter2);
$dataFilters[] = $filter2;

// 示例2:按工作表ID筛选(替换为你的工作表ID)
// $sheetFilter3 = new Google\Service\Sheets\SheetDataFilter();
// $sheetFilter3->setSheetId(123456789);
// $filter3 = new Google\Service\Sheets\DataFilter();
// $filter3->setSheetFilter($sheetFilter3);
// $dataFilters[] = $filter3;

// 将筛选器添加到请求,并开启格式数据获取
$request->setDataFilters($dataFilters);
$request->setIncludeGridData(true);

// 执行请求
$response = $service->spreadsheets->getByDataFilter($spreadsheetId, $request);

// 解析返回的格式数据
foreach ($response->getSheets() as $sheet) {
    $sheetTitle = $sheet->getProperties()->getTitle();
    echo "工作表:{$sheetTitle}\n";
    
    foreach ($sheet->getData() as $gridData) {
        foreach ($gridData->getRowData() as $row) {
            foreach ($row->getValues() as $cell) {
                $textFormat = $cell->getUserEnteredFormat()?->getTextFormat();
                if ($textFormat) {
                    $fontColor = $textFormat->getForegroundColor();
                    echo "单元格字体颜色:" . print_r($fontColor, true) . "\n";
                }
            }
        }
    }
}

错误原因说明

之前的代码直接传入JSON字符串,不符合API参数要求。Google Sheets PHP API的getByDataFilter方法要求第二个参数必须是Google\Service\Sheets\GetSpreadsheetByDataFilterRequest类型的实例,需要通过API提供的实体类来构建请求体,而非手动序列化JSON。

内容的提问来源于stack exchange,提问作者Dan Wenschhof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:00:08