9

I am trying to write a value to a cell with Google Sheet API with Java. For reading I used guide from Java Quickstart which worked fine for me.

For writing to Google Sheet I use:

service.spreadsheets().values().update(spreadsheetId, "Sheet1!A4:H", response).execute();

This function outputs the following error while run:

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"
}

As a Authentication Scope I am using

private static final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS);
Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
Alex Kolo
  • 243
  • 3
  • 14
  • Have you check your [`client-secret.json`](https://developers.google.com/sheets/guides/authorizing#installed-applications) file? Or used the proper [scopes](https://developers.google.com/sheets/guides/authorizing#OAuth2Authorizing) in authorizing request for Spreadsheet. I hope this helps. – Mr.Rebot May 31 '16 at 08:07
  • Try to use approval_prompt=false when build the auth flow. – hoozecn Jun 01 '16 at 03:28
  • @Mr.Rebot I have recreated client-secret.json but nothing changed. Regarding the scopes - am I using the right one as I stated in original message? – Alex Kolo Jun 01 '16 at 07:21
  • @hoozecn Can you explain more regarding the flow please? – Alex Kolo Jun 01 '16 at 07:24
  • `GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(DATA_STORE_FACTORY) .setAccessType("offline").setApprovalPrompt("force") .build(); ` – hoozecn Jun 01 '16 at 13:57

4 Answers4

13

Apparently there were several issues together:

  1. Delete credentials that were stored at /Users/XXX/.credentials.
  2. Change Scopes to SheetsScopes.SPREADSHEETS.
  3. Google Sheet Share and Edit options at on Sheet itself.

Now it works! Thank you guys for help

Alex Kolo
  • 243
  • 3
  • 14
3

I was having the same issue. I resolved the problem that was in the scope. I just changed

SheetsScopes.SPREADSHEETS.READONLY

To

 SheetsScopes.SPREADSHEETS

And it works very well.

TSR
  • 17,242
  • 27
  • 93
  • 197
0

The Java API must be used in an interactive way, if you're running this on a server that can't pop up a web-browser (which will let you approve an OAuth dialog), then the authentication flow doesn't get proper credentials and won't work.

While running this, do you see a browser pop up to approve an OAuth dialog? If not, you're likely running in a headless session and will need some other means to get the user's credentials.

Sam Berlin
  • 3,603
  • 12
  • 23
-1

Try replacing "Sheet1!A4:H" with A4:H

Hemant Yadav
  • 601
  • 1
  • 5
  • 4