GregMa GregMa -3 years ago 112
Java Question

How do I search for a file/open/create a googlesheet in another users folder using a service account?

Here is the scenario. I have an account where I keep test result spreadsheets. I have a service account that I use to programatically (with java and google drive apiv3) to add/update those spreadsheets. I need a way to create a spreadsheet and to search for a spreadsheet in that users account and folder from the service account. I have the following code which gets a list of files, however it's the files inside the service accounts folder, not the user accounts folder. Any help?

private static boolean findSpreadsheetFile(String sSpreadsheetName)
throws GeneralSecurityException, IOException, URISyntaxException
String pageToken = null;
// Build a new authorized API client service.
Drive driveService = getDriveService();
// Print the names and IDs
FileList result = driveService.files().list()
.setFields("nextPageToken, files(id, name)")
for ( file : result.getFiles())
System.out.printf("Found file: %s (%s)\n", file.getName(), file.getId());
pageToken = result.getNextPageToken();
while (pageToken != null);
return true;

public static Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException
Credential credential = authorizeDrive();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();

private static GoogleCredential authorizeDrive() throws GeneralSecurityException, IOException, URISyntaxException
JacksonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
URL fileUrl = ParseTestResultsEmails.class.getResource(sP12Filename);
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setServiceAccountPrivateKeyFromP12File(new File(fileUrl.toURI()))
return credential;

Answer Source

Seems as if there is no way to do what I wanted in Google Drive using the API. What I ended up doing, was creating the sheet as the "Service Account", then transferring ownership to the user I wanted, then could share it to the groups that needed access. That worked great!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download