Google电子表格Java API不返回电子表格

问题描述:

我需要关于Google Spreadsheets Java API的帮助。即使我有电子表格,我也会收到一份空白的电子表格列表。Google电子表格Java API不返回电子表格

List<SpreadsheetEntry> spreadsheets = feed.getEntries(); 

在我的代码中没有返回任何条目。而当我在浏览器中运行URL http://spreadsheets.google.com/feeds/spreadsheets/private/full时,我可以在JSON中看到电子表格条目。

这是为什么?我怎样才能解决这个问题?这里是我的代码:

import java.io.File; 
import java.io.IOException; 
import java.net.URL; 
import java.security.GeneralSecurityException; 
import java.util.Arrays; 
import java.util.List; 

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.http.javanet.NetHttpTransport; 
import com.google.api.client.json.jackson.JacksonFactory; 
import com.google.gdata.client.spreadsheet.SpreadsheetService; 
import com.google.gdata.data.spreadsheet.SpreadsheetEntry; 
import com.google.gdata.data.spreadsheet.SpreadsheetFeed; 
import com.google.gdata.util.ServiceException; 

public class TestSpreadsheet { 

    private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]"; 

    private static final File SERVICE_ACCOUNT_PKCS12_FILE = new File("./key.p12"); 
    private static SpreadsheetService SPREADSHEETSERVICE; 

    public static void main(String[] args) throws GeneralSecurityException, IOException, ServiceException { 


      HttpTransport httpTransport = new NetHttpTransport(); 
      JacksonFactory jsonFactory = new JacksonFactory(); 
      String [] SCOPESArray= {"https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds"}; 

      List<String> SCOPES = Arrays.asList("https://spreadsheets.google.com/feeds", "https://spreadsheets.google.com/feeds/spreadsheets/private/full", "https://docs.google.com/feeds"); 

      //final List<String> SCOPES = Arrays.asList(SCOPESArray); 
      GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(jsonFactory) 
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
      .setServiceAccountScopes(SCOPES) 
      .setServiceAccountPrivateKeyFromP12File(SERVICE_ACCOUNT_PKCS12_FILE) 
      .build(); 
      credential.refreshToken(); 
      SPREADSHEETSERVICE = new SpreadsheetService("test"); 
      SPREADSHEETSERVICE.setOAuth2Credentials(credential); 

      URL SPREADSHEET_FEED_URL; 
      SPREADSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"); 

      SpreadsheetFeed feed = SPREADSHEETSERVICE.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class); 
      List<SpreadsheetEntry> spreadsheets = feed.getEntries(); 

      if (spreadsheets.size() == 0) { 
       System.out.println("No spreadsheets found."); 
      } 
    } 

} 
+0

请详细解释您的问题。你尝试过任何调试吗?你尝试了什么,获得了哪些结果? – Sebastian

+0

是的,我试着调试它。问题是代码List spreadsheets = feed.getEntries();不返回任何条目。而当我在浏览器中运行url https://spreadsheets.google.com/feeds/spreadsheets/private/full时,我可以在JSON中看到电子表格条目。 – srnagpure

+0

你也可以提供你的错误日志吗? – abielita

我找到了解决这个问题的办法。我们需要与服务帐户ID共享电子表格,例如,在上述情况下,[email protected]是服务帐户ID,我们需要使用此ID共享电子表格。