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);
5
  • Have you check your client-secret.json file? Or used the proper scopes in authorizing request for Spreadsheet. I hope this helps. Commented May 31, 2016 at 8:07
  • Try to use approval_prompt=false when build the auth flow. Commented Jun 1, 2016 at 3: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? Commented Jun 1, 2016 at 7:21
  • @hoozecn Can you explain more regarding the flow please? Commented Jun 1, 2016 at 7:24
  • GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(DATA_STORE_FACTORY) .setAccessType("offline").setApprovalPrompt("force") .build(); Commented Jun 1, 2016 at 13:57

4 Answers 4

14

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

Sign up to request clarification or add additional context in comments.

1 Comment

Deleting Creds and Changing the scope worked for me. Thank you Alex :)
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.

Comments

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.

Comments

-1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.