PHP Google Sheets 将工作表从一个电子表格复制到另一个电子表格

问题描述 投票:0回答:1

这需要使用 Google Sheets API 和 PHP 我有一个单例包装类(让我们面对现实吧,大多数 Google PHP api 都需要它们),我的客户端类中的一个实例是

$gsheets

我之前已经进行过此工作,并且仍然证明我具有 API 访问权限,我通过运行创建一个新的电子表格:

$newspreadsheetTitle="ABC123456";
$newdocument = $gsheets->newSpreadsheetDocument($newspreadsheetTitle);

它调用我自己的包装类方法:

  public function newSpreadsheetDocument($title) {
    $newspread = new Google_Service_Sheets_Spreadsheet([
    'properties' => [
        'title' => $title
    ]
    ]);
    $newspread = $this->service->spreadsheets->create($newspread);
    $id = $newspread->getSpreadsheetId();
    return ["ID" => $newspread->getSpreadsheetId(), "url" => $newspread->getSpreadsheetUrl()];
  }

此时,新电子表格已创建,标题为 ABC123456,并返回预期的 ID 和 url,可以通过将链接粘贴到浏览器的地址栏来访问,并使用返回的 ID。 这证明

$this->service

是我的包装类中功能齐全的 Google Sheets 客户端,并创建一个名为 $spreadsheetRef 的电子表格文档。

现在我的问题是:

然后我希望将此模板中的内容(整个选项卡/工作表)复制到这个新创建的电子表格中,所以我打电话

  $gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], 0);

我的包装实例方法

  public function copySheetFromTo($sourceSpreadsheetFileId, $destinationSpreadsheetFileId, $sourceTabRef) {
    $requestBody = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest();
    $requestBody->setDestinationSpreadsheetId($destinationSpreadsheetFileId);
    $response = $this->service->spreadsheets_sheets->copyTo($sourceSpreadsheetFileId, $sourceTabRef, $requestBody);

    /*
        $request = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest([
            "destinationSpreadsheetId" => $toFileID
        ]);
        $this->service->spreadsheets_sheets->copyTo($fromFileID, $fromTabName, $request);
    */
    return $response;
  }

我尝试了几种排列,例如

      $gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], 0);

错误:

The sheet (0) does not exist.

      $gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], 1);

错误:

The sheet (1) does not exist.

  $gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], "template_sheet");//the name of the sheet tab to copy

错误

Invalid value at 'sheet_id' (TYPE_INT32), "template_sheet"

请有人告知这里哪些参数不正确。

php google-sheets-api
1个回答
0
投票

关于您的显示脚本,

$sourceTabRef
必须是源电子表格中源工作表的工作表 ID。 参考

但是,从您的错误消息

The sheet (0) does not exist.
The sheet (1) does not exist.
来看,我担心您要复制的工作表的工作表ID可能与
0
1
不同。所以,请再次确认。

此外,文本

template_sheet
也不能用作工作表ID。也请大家注意这一点。

您可以在这个官方文档的电子表格的URL中看到sheet ID。

https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit?gid=SHEET_ID#gid=SHEET_ID

注:

  • 我认为,如果您的客户端
    $this->service
    可以使用Sheet API并访问电子表格,那么您的脚本
    copySheetFromTo
    就可以工作。当我测试它时,我确认该脚本可以使用有效的工作表 ID 来工作
    $sourceTabRef

参考:

© www.soinside.com 2019 - 2024. All rights reserved.