让Google Sheets的PHP库让我创建一个具有多个选项卡(表)的Electron 表格,这让我花了很长时间.为简单起见,代码段被截断
use Google\Service\Exception as ServiceException;
use Google\Service\Sheets;
use Google\Service\Sheets\AddSheetRequest;
use Google\Service\Sheets\BatchUpdateSpreadsheetRequest;
use Google\Service\Sheets\BatchUpdateValuesRequest;
use Google\Service\Sheets\SheetProperties;
use Google\Service\Sheets\Spreadsheet;
function addTabs($sheetId, array $tabNames) {
$requests = [];
foreach ($tabNames as $index => $tabName) {
$request = new AddSheetRequest();
$props = new SheetProperties();
$props->setTitle($tabName);
$props->setIndex($index);
$request->setProperties($props);
$requests[] = $request;
}
$batchRequest = new BatchUpdateSpreadsheetRequest();
$batchRequest->setRequests($requests);
try {
$this->service->spreadsheets->batchUpdate($sheetId, $batchRequest);
} catch (ServiceException $e) {
dd($e);
}
}
addTabs($id, ['A', 'B', 'C']);
得到这些错误.
Invalid JSON payload received. Unknown name "properties" at 'requests[0]': Cannot find field.
Invalid JSON payload received. Unknown name "properties" at 'requests[1]': Cannot find field.
Invalid JSON payload received. Unknown name "properties" at 'requests[2]': Cannot find field.
我不知道这里出了什么问题,因为这似乎与文档中定义的规范相匹配 https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddSheetRequest个
我try 过的另一个方法是在最初的Electron 表格创建请求中一次生成所有标签:
function createSheet()
{
$sheetProps = [
'properties' => [
'title' => 'Test',
],
'sheets' => [],
];
$sheetRequest = new Spreadsheet($sheetProps);
$sheet1 = [
'properties' => [
'title' => 'Tab 1',
],
'data' => [
'rowData' => [
['values' => [['userEnteredValue' => ['numberValue' => 1]], ['userEnteredValue' => ['numberValue' => 2]], ['userEnteredValue' => ['numberValue' => 3]]]],
['values' => [['userEnteredValue' => ['numberValue' => 4]], ['userEnteredValue' => ['numberValue' => 5]], ['userEnteredValue' => ['numberValue' => 6]]]],
],
],
];
$sheet2 = [
'properties' => [
'title' => 'Tab 2',
],
'data' => [
'rowData' => [
['values' => [['userEnteredValue' => ['numberValue' => 1]], ['userEnteredValue' => ['numberValue' => 2]], ['userEnteredValue' => ['numberValue' => 3]]]],
['values' => [['userEnteredValue' => ['numberValue' => 4]], ['userEnteredValue' => ['numberValue' => 5]], ['userEnteredValue' => ['numberValue' => 6]]]],
],
],
];
$sheetRequest = new Spreadsheet([
'properties' => [
'title' => 'Testing',
],
'sheets' => [$sheet1, $sheet2],
]);
return $this->service->spreadsheets->create($sheetRequest);
}
错误:
Invalid JSON payload received. Unknown name \"0\" at 'spreadsheet.sheets[0].data.row_data': Cannot find field.
如果我将上面的代码行改为以下代码,而不是数组,它就可以工作了.
'sheets' => $sheet1
但规范清楚地将Spreadsheet.Sheets显示为一个数组:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#Spreadsheet
我错过了什么吗?有谁有使用PHP Sheets API创建多选项卡Electron 表格的好的实用示例吗?