2016-04-20 3 views
2

Код, приведенный в этом tutorial (ниже приведенный ниже фрагмент), извлекает список всех электронных таблиц для аутентифицированного пользователя.Как получить электронные таблицы из определенной папки Google Диска?

public class MySpreadsheetIntegration { 
    public static void main(String[] args) throws AuthenticationException, 
     MalformedURLException, IOException, ServiceException { 

     SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1"); 

     // TODO: Authorize the service object for a specific user (see other sections) 

     // Define the URL to request. This should never change. 
     URL SPREADSHEET_FEED_URL = new URL(
     "https://spreadsheets.google.com/feeds/spreadsheets/private/full"); 

     // Make a request to the API and get all spreadsheets. 
     SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, 
      SpreadsheetFeed.class); 
     List<SpreadsheetEntry> spreadsheets = feed.getEntries(); 

     // Iterate through all of the spreadsheets returned 
     for (SpreadsheetEntry spreadsheet : spreadsheets) { 
      // Print the title of this spreadsheet to the screen 
      System.out.println(spreadsheet.getTitle().getPlainText()); 
     } 
    } 
} 

Но я не хочу получать все электронные таблицы. Я хочу получить только те таблицы, которые находятся в определенной папке (если папка существует, иначе завершение программы). Возможно ли использование этого API? Если да, то как?

Насколько я понимаю, необходимо изменить таблицу электронных таблиц. Но я не получил от него какой-либо примерный фрагмент.

Пожалуйста, ответьте или прокомментируйте, если я не выполнил нормы StackOverflow или пропущенные детали, о которых я должен был упомянуть.

+2

Я не думаю, что API-интерфейс для таблиц даже имеет понятие «папка». Вам необходимо [children.list] (https://developers.google.com/drive/v2/reference/children/list#request) из Drive API. Это возвращает список файлов, а не таблиц; но URL-адреса содержат идентификаторы электронных таблиц, поэтому вы можете попытаться получить к ним доступ таким образом ... Или просто используйте API скриптов приложений, который предоставляет чистый способ передать объект File в SpreadsheetApp, возвращая электронную таблицу. –

+0

@Meta Хорошо, я понял. Но сначала я должен получить папку. Кроме того, могу ли я получить SpreadsheetEntry из fileId? –

ответ

1

Я разработал решение следующим образом:

Во-первых, получить FILEID этой конкретной папки. Используйте setQ(), чтобы пройти проверку запросов на имя папки и папки. Следующий фрагмент будет полезен:

result = driveService.files().list() 
     .setQ("mimeType='application/vnd.google-apps.folder' 
       AND title='" + folderName + "'") 
     .setPageToken(pageToken) 
     .execute(); 

Затем получите список файлов в этой конкретной папке. Я нашел это от этого tutorial. Ниже приведен фрагмент:

private static void printFilesInFolder(Drive service, String folderId) throws IOException { 
    Children.List request = service.children().list(folderId); 

    do { 
     try { 
      ChildList children = request.execute(); 

      for (ChildReference child : children.getItems()) { 
       System.out.println("File Id: " + child.getId()); 
      } 
      request.setPageToken(children.getNextPageToken()); 
     } catch (IOException e) { 
      System.out.println("An error occurred: " + e); 
      request.setPageToken(null); 
     } 
    } while (request.getPageToken() != null && 
     request.getPageToken().length() > 0); 
} 

Наконец, проверьте наличие электронных таблиц и получите листы для них. Следующий фрагмент может помочь.

URL WORKSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/worksheets/" + fileId + "/private/full"); 

WorksheetFeed feed = service.getFeed(WORKSHEET_FEED_URL, WorksheetFeed.class); 
worksheets = feed.getEntries(); 

Если кто-то находит лучшее решение, ответьте. Или, если есть проблема с моим решением, прокомментируйте.

Смежные вопросы