使用Google APIs PHP客户端创建带初始数据的Google表格
一次请求创建带自定义首行的谷歌表格
要在创建表格的同时为每个工作表填充首行自定义数据,你可以利用Google Sheets API的Spreadsheet对象中的sheets[].data字段,通过GridData、RowData和CellData类定义单元格内容,实现单次请求完成创建与数据填充。
修改后的核心代码
重点调整set_spreadsheet_with_sheets方法,同时确保引入所需的API类:
<?php // 确保导入所需的类 use Google\Service\Sheets\Sheet; use Google\Service\Sheets\SheetProperties; use Google\Service\Sheets\GridData; use Google\Service\Sheets\RowData; use Google\Service\Sheets\CellData; use Google\Service\Sheets\ExtendedValue; class GoogleSheetFunctions { public function create_new() { $client = $this->get_client(); if ( is_null( $client ) ) { return false; } $service = new Google\Service\Sheets($client); $spreadsheet = $this->set_spreadsheet_title(); $spreadsheet = $this->set_spreadsheet_with_sheets( $spreadsheet ); try { $response = $service->spreadsheets->create( $spreadsheet ); $spreadsheet_id = $response->spreadsheetId; return $spreadsheet_id; } catch ( Exception $ex ) { error_log($ex->getMessage()); return false; } // 移除原代码中未定义的$permission无效判断 } protected function set_spreadsheet_with_sheets( Google\Service\Sheets\Spreadsheet $spreadsheet ) { // 定义每个工作表的名称和对应的首行自定义数据 $sheet_configs = [ [ 'name' => 'sheet-no-1', 'header' => ['ID', '名称', '创建时间'] ], [ 'name' => 'sheet-no-2', 'header' => ['产品ID', '价格', '库存'] ], [ 'name' => 'sheet-no-3', 'header' => ['订单号', '用户', '状态'] ] ]; $sheets = []; foreach ( $sheet_configs as $config ) { // 创建工作表属性 $sheet_properties = new SheetProperties(); $sheet_properties->setTitle( $config['name'] ); $temp_sheet = new Sheet(); $temp_sheet->setProperties( $sheet_properties ); // 构建首行数据 $cell_data_list = []; foreach ($config['header'] as $cell_value) { $cell_data = new CellData(); $extended_value = new ExtendedValue(); $extended_value->setStringValue($cell_value); $cell_data->setUserEnteredValue($extended_value); $cell_data_list[] = $cell_data; } $row_data = new RowData(); $row_data->setValues($cell_data_list); $grid_data = new GridData(); $grid_data->setRowData([$row_data]); // 设置数据从第1行第1列开始(索引从0开始) $grid_data->setStartRowIndex(0); $grid_data->setStartColumnIndex(0); // 将数据关联到工作表 $temp_sheet->setData([$grid_data]); $sheets[] = $temp_sheet; } $spreadsheet->setSheets( $sheets ); return $spreadsheet; } protected function set_spreadsheet_title() { $month = current_datetime()->format( 'F-Y' ); $spreadsheet_name = $month; $spreadsheet_props = new Google\Service\Sheets\SpreadsheetProperties(); $spreadsheet_props->setTitle( $spreadsheet_name ); $spreadsheet = new Google\Service\Sheets\Spreadsheet(); $spreadsheet->setProperties( $spreadsheet_props ); return $spreadsheet; } protected function get_client( $scopes = [] ) { $credential = 'location/of/credential.json'; $scopes = [ 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/spreadsheets', ]; return new Google\Client( [ 'credentials' => $credential, 'scopes' => $scopes, ] ); } }
关键说明
- 类导入:必须导入
GridData、RowData等相关类,否则无法构建单元格数据结构。 - 工作表配置:将工作表名称和首行数据放在
$sheet_configs数组中,便于统一管理和修改。 - 数据构建:通过
ExtendedValue设置单元格的字符串值,再依次封装为CellData、RowData和GridData,最终关联到对应的工作表。 - 无效代码移除:原代码中
$permission变量未定义,已移除该无效判断,避免逻辑错误。
内容的提问来源于stack exchange,提问作者sapayth
相关产品推荐
相关产品推荐

