【问题标题】:Google spreadsheet create a new sheet with permission for all users have link谷歌电子表格创建一个具有所有用户权限的新工作表有链接
【发布时间】:2018-07-21 15:32:42
【问题描述】:

我尝试使用 google sheet API v4 创建新工作表。我成功创建它。但是,我发现工作表正在设置,因为我是唯一能够访问的人。我的目标是让拥有 url 链接的用户可以在 Java 请求中访问工作表。

我尝试在创建电子表格时将谷歌凭据设置为空,但它用于在驱动器中创建电子表格。因此,这是行不通的。 我浏览它的库类和 api,但我找不到与权限相关的任何内容。

我不太确定我创建电子表格的方式是否正确。这是我的代码:

public class CreateSpreadSheetTask extends AsyncTask<Void, Void, Void> {
    private com.google.api.services.sheets.v4.Sheets mService = null;
    private Exception mLastError = null;
    private String title = null;
    private CreateSpreadsheetListener listener = null;

    public CreateSpreadSheetTask(GoogleAccountCredential credential, String title, CreateSpreadsheetListener listener) {
        HttpTransport transport = AndroidHttp.newCompatibleTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        mService = new Sheets.Builder(
                transport, jsonFactory, credential)
                .setApplicationName("Google Sheets API Android Quickstart")
                .build();
        this.title = title;
        this.listener = listener;
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            this.listener.onRecvCreateSpreadsheet(getSpreadsheetFromApi());
        } catch (Exception e) {
            e.printStackTrace();
            mLastError = e;
            cancel(true);
        }
        return null;
    }

    private Spreadsheet getSpreadsheetFromApi() throws IOException {
        Spreadsheet spreadsheet = new Spreadsheet();
        SpreadsheetProperties properties = new SpreadsheetProperties();
        properties.setTitle(this.title);
        spreadsheet.setProperties(properties);
        Sheets.Spreadsheets.Create request = mService.spreadsheets().create(spreadsheet);
        return request.execute();
    }
}

【问题讨论】:

  • 使用 Drive REST API 共享文档/将其公开。 Drive 的文件 ID 与 Sheets API 在来自 Create 的响应中为您提供的 spreadsheetId 相同。

标签: java android google-sheets google-sheets-api


【解决方案1】:

正如@tehhowch 所说,权限应通过 Drive API 处理。这里只是更新一个答案。

private void updateProperty(com.google.api.services.drive.Drive driveService, String fileId, String email) throws IOException {
    BatchRequest batch = driveService.batch();
    Permission clientPermission = new Permission();
    clientPermission.setEmailAddress(email);
    clientPermission.setRole("writer");
    clientPermission.setType("user");
    driveService.permissions().create(fileId, clientPermission)
            .setFields("id")
            .setSendNotificationEmail(true)
            .queue(batch, new JsonBatchCallback() {
                @Override
                public void onSuccess(Object o, HttpHeaders responseHeaders) throws IOException {
                    Log.e("permissione success", String.valueOf(o));
                    listener.onRecvShareSpreadsheet(true);
                }

                @Override
                public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws IOException {
                    Log.e("permissione error", e.getMessage());
                    listener.onRecvShareSpreadsheet(false);
                }
            });
    batch.execute();
}

参考:Google api permission

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2018-03-12
    • 2017-04-28
    • 1970-01-01
    • 2016-01-03
    相关资源
    最近更新 更多