【问题标题】:Is there any way to reach a spreadsheet which created by a service account?有什么方法可以访问由服务帐户创建的电子表格?
【发布时间】:2021-07-03 18:53:18
【问题描述】:

我使用带有服务帐户的 Google Sheets API 创建了一个电子表格,但是当我尝试使用 url 访问时我无法访问它,但出现访问错误。我也尝试了 set permissions.create 但我不知道如何找到包含此电子表格的文件(当我使用 url 中的电子表格的 id 时,我在 Google Drive API 上发现文件未找到错误)id。有没有办法公开电子表格(可能在创建时)?

这是我的创建电子表格函数

func createSpreadsheet(ctx context.Context, title string, creds []byte) (*GoogleSpreadsheet, error) {

    srv, err := sheets.NewService(ctx, option.WithCredentialsJSON(creds))
    if err != nil {
        return nil, err
    }

    var (
        prop = &sheets.SpreadsheetProperties{
            Title: title,
        }

        sheet = &sheets.Spreadsheet{
            Properties: prop,
        }
    )
    resp, err := srv.Spreadsheets.Create(sheet).Do() //Create request is send
    if err != nil {
        return nil, err
    }
    gs := &GoogleSpreadsheet{
        SpreadSheetID:   resp.SpreadsheetId,
        SpreadSheetName: title,
        SheetID:         resp.Sheets[0].Properties.SheetId,
        SheetName:       resp.Sheets[0].Properties.Title,
        URL:             resp.SpreadsheetUrl,
        Service:         srv,
    }

    mux.Lock()
    defer mux.Unlock()
    spreadsheets[gs.SpreadSheetID] = gs
    return gs, nil
}

【问题讨论】:

  • 来自however I can't reach it when I try to reach with url I get an access error,具体情况我无法理解。我为此道歉。可以问一下具体情况吗?
  • 请考虑提供您正在处理的代码的相关部分。当您调用permissions.create 时,您使用的是最初创建电子表格的同一帐户?
  • @Tanaike 当然可以 :) ,我从我的代码中找到了由服务帐户创建的电子表格 url,我尝试使用此 url (docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxx/edit) 访问电子表格,但出现错误表示您需要访问。
  • @Iamblichus 你是对的我为此道歉,我添加了我的功能,你的问题的答案是我用我的主要 gmail 帐户做的,这是我的服务帐户的父帐户我不知道该怎么做它与服务帐户。看的不是很清楚,如果能得到帮助就更好了。
  • 感谢您的回复。关于I found spreadsheet url which is created by service account from my code and I tried to reach to spreadsheet with this url (docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxx/edit) and I get an error that says you need to access.,在这种情况下,您希望如何访问电子表格?

标签: go google-sheets google-sheets-api spreadsheet service-accounts


【解决方案1】:

问题:

您使用一个帐户创建了电子表格,并尝试使用另一个帐户(一个是您的常规帐户,另一个是服务帐户)来检索它。

找不到该文件是正常的,因为它没有与其他帐户共享。服务帐户不是您,因此使用您的常规帐户创建文件不会授予您服务帐户的访问权限,反之亦然。

解决办法:

如果您希望其他帐户能够访问它,请使用您创建电子表格时使用的同一帐户

致电 Permissions: create

例如,如果您想将其公开,请求正文将是:

{
  "role": "reader", // Or "writer"? Depends on what you want
  "type": "anyone"
}

或者,如果您想与某个帐户共享,那就是:

{
  "role": "reader", // Or "writer"? Depends on what you want 
  "type": "user",
  "emailAddress": "your_email_address"
}

【讨论】:

  • 感谢您的回复,但我不知道如何使用创建电子表格的服务帐户调用,我认为这是我的主要问题。
  • 如果能够使用服务帐户 (I created a spreadsheet using Google Sheets API with service account) 创建文件,您为什么不知道如何再次使用服务帐户?你能澄清一下吗?
猜你喜欢
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多