使用Java通过API写入GoogleSheet

使用Java通过API写入GoogleSheet,java,google-api,google-api-java-client,google-sheets-api,Java,Google Api,Google Api Java Client,Google Sheets Api,我正试图用Google Sheet API和Java向单元格写入一个值。 在阅读时,我使用了一本指南,这本指南对我很有用 对于写入谷歌工作表,我使用: service.spreadsheets().values().update(spreadsheetId, "Sheet1!A4:H", response).execute(); 此函数在运行时输出以下错误: com.google.api.client.googleapis.json.GoogleJsonResponseException: 4

我正试图用Google Sheet API和Java向单元格写入一个值。 在阅读时,我使用了一本指南,这本指南对我很有用

对于写入谷歌工作表,我使用:

service.spreadsheets().values().update(spreadsheetId, "Sheet1!A4:H", response).execute();
此函数在运行时输出以下错误:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Request had insufficient authentication scopes.",
    "reason" : "forbidden"
  } ],
  "message" : "Request had insufficient authentication scopes.",
  "status" : "PERMISSION_DENIED"
}
作为身份验证作用域,我正在使用

private static final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS);
private static final List SCOPES=Arrays.asList(SheetsScopes.SPREADSHEETS);

必须以交互方式使用Java API,如果您在无法弹出web浏览器(这将允许您批准OAuth对话框)的服务器上运行Java API,则身份验证流无法获得正确的凭据,也无法工作


运行此操作时,您是否看到浏览器弹出以批准OAuth对话框?如果不是,您可能正在运行无头会话,并且需要一些其他方法来获取用户的凭据。

显然有几个问题:

  • 删除存储在/Users/XXX/.credentials的凭据
  • 将范围更改为SheetsScopes.SPREADSHEETS
  • 谷歌工作表共享和编辑选项在工作表本身
  • 现在它工作了!
    谢谢你们的帮助

    我也遇到了同样的问题。我解决了范围内的问题。 我刚换了衣服

    SheetsScopes.SPREADSHEETS.READONLY
    


    而且效果很好

    尝试将“Sheet1!A4:H”替换为A4:H

    您检查过文件了吗?或在授权电子表格请求时使用适当的。我希望这会有所帮助。在构建身份验证流时,请尝试使用approval\u prompt=false。@Mr.Rebot我已重新创建client-secret.json,但没有任何更改。关于作用域-我使用的是我在原始消息中所说的正确的吗?@hoozecn您能解释更多关于流的信息吗?
    GoogleAuthorizationCodeFlow=new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT,JSON_FACTORY,clientSecrets,scopes)。setDataStoreFactory(DATA_STORE_FACTORY).setAccessType(“脱机”).setApprovalPrompt(“force”).build();
    Sir,您在这里救了一命。删除Creds和更改范围对我来说很有效。谢谢Alex:)
     SheetsScopes.SPREADSHEETS