当前位置: 首页 > 知识库问答 >
问题:

使用Google Sheets API复制整个电子表格

陶修洁
2023-03-14

我有一个准备好的模板和一堆应用程序脚本代码的电子表格来处理表单。我需要使用Google Sheets API将数据导出到此模板中,但在同一个电子表格中为所有用户执行此操作并不是最好的主意。因此,我需要为每个用户创建一个新的电子表格。我设法创建了一个空的电子表格,从原始电子表格中复制了模板表,并将其插入新的电子表格中,如下所示:

    //Creating new Spreadsheet
    $service = new Google_Service_Sheets($client);
    $serviceDrive = new Google_Service_Drive($client);

    $spreadsheet = new Google_Service_Sheets_Spreadsheet([
        'properties' => [
            'title' => Lang::get('pls.export.spreadsheet_name'),
        ]
    ]);
    $spreadsheet = $service->spreadsheets->create($spreadsheet, [
        'fields' => 'spreadsheetId'
    ]);

    //Copying sheet from template
    $sourceSpreadsheet = 'spreadsheet id goes here';
    $soureSheet = 'sheet id goes here';
    $requestBody = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest(['destinationSpreadsheetId' => $spreadsheet->spreadsheetId]);
    $response = $service->spreadsheets_sheets->copyTo($sourceSpreadsheet, $soureSheet, $requestBody);

这可以工作,我也可以在其中写入数据,但问题是,我无法复制Apps Script代码。我也一直在寻找一种方法来以某种方式复制整个旧电子表格并在那里导入数据,但找不到任何东西(不确定它是否有助于复制Apps Script代码)。是否可以使用Google Sheets API复制Apps Script代码并将其插入新的电子表格中?或者如何复制整个电子表格?

共有1个答案

白坚壁
2023-03-14

我使用Google Drive API解决了这个问题,并从那里复制了文件:

$serviceDrive = new Google_Service_Drive($client);
$drive = new Google_Service_Drive_DriveFile();
$spreadsheet = $serviceDrive->files->copy('your spreadsheet id', $drive);

然后将创建的文件共享给用户,如下所示:

$this->insertPermission($serviceDrive, $spreadsheet->id, $user->email, 'user', 'writer');

很有魅力!

编辑:这是插入权限函数

function insertPermission($service, $fileId, $value, $type, $role)
{
    $newPermission = new Google_Service_Drive_Permission();
    $newPermission->setEmailAddress($value);
    $newPermission->setType($type);
    $newPermission->setRole($role);
    try {
        return $service->permissions->create($fileId, $newPermission);
    } catch (Exception $e) {
        print $e->getMessage();
    }
    return NULL;
}
 类似资料:
  • 我有每周更新的谷歌电子表格。它包含多个工作表,每个星期都有不同的名称。 有没有一种方法可以使用google脚本将该电子表格中的所有表格复制到另一个电子表格中?我的主要目标是复制整个电子表格,并让我运行脚本的工作表拥有源表中的所有工作表和数据。如果这个复制过程只复制数据,而不是其他工作表中的公式,那也很好。 提前谢谢! 埃里克

  • 我想阅读Java快速入门中描述的谷歌电子表格 https://developers.google.com/sheets/quickstart/java 快速入门解释如何从给定范围读取数据 但我有一个问题,我不知道电子表格的范围。列数可以更改。例如,我如何在不知道范围的情况下读取表中的所有数据? 问候 迈克尔

  • 我什么都试过了,但还是做不到 我试图使用setValues()将数据从一个电子表格复制到另一个电子表格,因为link对我不起作用。我还需要保持触发器的编辑。 因此,我创建了一个名为AddConvocacao的函数,并且总是在有任何更改时运行脚本。 为什么我在编辑时使用不起作用? 非常感谢!=)

  • 试图复制整个电子表格,但我想没有api可以这样做。 基本上,我正在尝试做以下工作: 有一个电子表格,我想对其进行小的更改。 创建一个新的电子表格,将模板中的所有表格逐个复制到新的电子表格中(电子表格复制会更有效率) 创建新的电子表格工作正常,但从电子表格复制表格不起作用。 尝试了两种方法: 角: 给出以下错误: 对飞行前请求的响应未通过访问控制检查:无“访问控制允许原点” Google Sheet

  • 我想从工作簿中复制一个范围,并将其转置到当前工作表中。 工作簿(“库\document\book1.xlsx”)。工作表(“sheet1”)。范围(“A1:A5”)。复制

  • 当我使用library方法时,我希望能够仅复制电子表格及其所有工作表以及所有定义的工作表名称: 或 目前,这些方法复制所有链接的表单和表单中使用的脚本。这是我需要的一个不必要的副作用,会导致驱动器文件夹中的大混乱。有没有一种方法可以快速有效地做到这一点,而不需要逐个单元格、逐页复制?还是这是唯一的选择? 谢谢