2016-04-20 22 views
2

Der Code in diesem tutorial (Snippet unten angegeben) ruft eine Liste aller Tabellen für den authentifizierten Benutzer ab.Wie erhalten Sie Tabellen aus einem bestimmten Google Drive-Ordner?

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()); 
     } 
    } 
} 

Aber ich möchte nicht alle Tabellenkalkulationen erhalten. Ich möchte nur die Tabellen, die sich in einem bestimmten Ordner befinden (wenn der Ordner existiert, andernfalls das Programm beenden). Ist es möglich, diese API zu verwenden? Wenn ja, wie?

Soweit mein Verständnis geht, muss der SpreadsheetFeed geändert werden. Aber ich habe kein Beispiel dafür bekommen.

Bitte antworten oder kommentieren, wenn ich nicht den Normen von StackOverflow oder verpassten Details, die ich erwähnen sollte, Folge geleistet habe.

+2

Ich glaube nicht, Spreadsheet API hat sogar ein Konzept von "Ordner". Sie benötigen [children.list] (https://developers.google.com/drive/v2/reference/children/list#request) von der Drive-API. Dies gibt eine Liste von Dateien und nicht von Tabellen zurück. Die URLs enthalten jedoch Spreadsheet-IDs, sodass Sie versuchen können, auf diese Weise auf sie zuzugreifen ... Oder verwenden Sie einfach die Apps Script-API, die eine saubere Methode zum Übergeben des File-Objekts an SpreadsheetApp bietet und eine Tabelle zurückgibt. –

+0

@Meta Ok, ich habe es verstanden. Aber ich muss zuerst den Ordner holen. Kann ich SpreadsheetEntry auch von fileId erhalten? –

Antwort

1

arbeitete ich die Lösung wie folgt:

zuerst die fileId dieses speziellen Ordner erhalten. Verwenden Sie setQ(), um die Abfrage nach dem Ordner- und Ordnernamen zu überprüfen. Das folgende Codefragment wird nützlich sein:

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

Dann erhalten Sie die Liste der Dateien in diesem bestimmten Ordner. Ich habe es von dieser tutorial gefunden. Snippet ist wie folgt:

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); 
} 

Zuletzt, überprüfen Sie für Tabellenkalkulationen und erhalten Sie Arbeitsblatt-Feeds für sie. Das folgende Snippet könnte helfen.

Wenn jemand eine bessere Lösung findet, antworten Sie bitte. Oder wenn es ein Problem mit meiner Lösung gibt, bitte Kommentar.

Verwandte Themen