google-apps-script - 使用 google java 客户端复制电子表格后,自定义 google 应用程序脚本不起作用

标签 google-apps-script google-drive-api google-oauth

我有一个带有自定义加载项的 google 电子表格模板,我正在尝试复制它

def copyTemplateSpreadsheet(Drive driveService) {
    File templateCopy = new File()
    templateCopy.setName("excel-template")

    def copiedFile = driveService.files().copy(templateSpreadsheetId, templateCopy).execute()
    setCorrectPermission(driveService, copiedFile.getId())
    copiedFile
}

private void setCorrectPermission(Drive driveService, def fileId) {
    Permission newPermission = new Permission();
    newPermission.setType("anyone");
    newPermission.setRole("writer");
    driveService.permissions().create(fileId, newPermission).execute();
}

问题是复制的电子表格已损坏加载项(未显示在加载项菜单中)。脚本编辑器中有正确的附加代码,但是当我尝试运行任何函数时,我收到错误消息
"We're sorry, a server error occurred. Please wait a bit and try again"

请记住,完全相同的代码在我的模板电子表格中运行良好。即使我删除所有代码并将 onOpen 函数留空,错误仍然出现。

当我使用常规的 google 驱动器网站 (drive.google.com) 复制附加组件时效果很好,当我尝试使用 google 的 API Explorer ( https://developers.google.com/drive/v3/reference/files/copy#try-it ) 时也可以正常工作。问题似乎只有在使用 sdk 时才会出现(至少是 java 一个 - 我没有尝试过其他任何一个)

另请记住,我正在使用本文中所述创建的 Google 服务帐户 https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount

并使用以下代码创建 Drive 实例
 Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException {
    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(G_SERVICE_EMAIL)
            .setServiceAccountScopes(Arrays.asList(DriveScopes.DRIVE))
            .setServiceAccountPrivateKeyFromP12File(PKC_12_FILE)
            .build();
    Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
            .setHttpRequestInitializer(credential)
            .build();


    return service;
}

不确定这是否重要,尤其是因为其他一切似乎都很好

任何修复想法?只要它们有效,我对任何变通方法持开放态度。
我也可以创建新文件并添加附加代码,但似乎我无法使用 API

最佳答案

我找到了我在那里描述的可接受的解决方案
How can I create spreadsheet with included gs script by API?

希望它可以帮助某人;)

关于google-apps-script - 使用 google java 客户端复制电子表格后,自定义 google 应用程序脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967100/

相关文章:

oauth-2.0 - 使用 Google+ 登录时从我的网页显示 Android 应用程序安装的选项

node.js - 无法通过Google电子表格API( Node JS)中的服务帐户访问写入

google-apps-script - 添加新日历事件时的 Google Apps 脚本和触发器

html - 传输或处理此请求时出错。错误代码 = 10,路径 =/wardeninit

google-drive-api - Google云端硬盘服务帐户-查看其他帐户中的文件

python - HTTP POST 使用 httplib2 错误

google-oauth - 使用 Google API Java 客户端库刷新 token

javascript - 验证 HTML 服务中的电子表格

google-apps-script - 创建一个基本的聊天栏?

python - 有没有办法在使用 gdrive API 将文件上传到 Google Drive 时重命名文件?