3

私の目的は、認証なしで Google スプレッドシートの URL から CellFeeds を取得することです。次のスプレッドシート URL (ウェブに公開) で試してみました: https://docs.google.com/spreadsheet/ccc?key=0AvNWoDP9TASIdERsbFRnNXdsN2x4MXMxUmlyY0g3VUE&usp=sharing

この URL は、変数「spreadsheetName」に格納されます。最初の試みは、URL 全体を Service.getFeed() の引数として取得することでした。
url = new URL(spreadsheetName); WorksheetFeed feed = service.getFeed(url, WorksheetFeed.class);

しかし、その後、次の例外に遭遇しました:

com.google.gdata.util.RedirectRequiredException: Found
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved

2 番目の試みは、FeedURLFactory を使用して、オリジン URLのキーで URL を構築することでした。

String key = spreadsheetName.split("key=")[1].substring(0, 44);
url = FeedURLFactory.getDefault().getCellFeedUrl(key,
                    worksheetName, "public", "basic");
WorksheetFeed feed = service.getFeed(url, WorksheetFeed.class);

...そして、次の例外がありました:

com.google.gdata.util.InvalidEntryException: Bad Request
Invalid query parameter value for grid-id.

私が何を間違えたのか、または認証なしでスプレッドシートの URL からデータを正常に取得した人はいますか? 事前にt​​hx!

4

2 に答える 2

1

2 つの問題があります。2 番目の問題についてはよくわかりませんが、最初の問題はcellFeedURL、正しいキーなしで a を使用しようとしているということです。単に を使用しているだけですworksheetName。これはおそらく正しくありません。次のようなことをすると:

public static void main(String... args) throws MalformedURLException, ServiceException, IOException {
    SpreadsheetService service = new SpreadsheetService("Test");
    FeedURLFactory fact = FeedURLFactory.getDefault();

    String key = "0AvNWoDP9TASIdERsbFRnNXdsN2x4MXMxUmlyY0g3VUE";
    URL spreadSheetUrl = fact.getWorksheetFeedUrl(key, "public", "basic");
    WorksheetFeed feed = service.getFeed(spreadSheetUrl,
            WorksheetFeed.class);

    WorksheetEntry entry = feed.getEntries().get(0);
    URL cellFeedURL = entry.getCellFeedUrl();
    CellFeed cellFeed = service.getFeed(cellFeedURL, CellFeed.class);
}

正しい が得られますCellFeedCellEntry.getCell()ただし、2 番目の問題は、この方法で行うと、すべてCellFeednull. 理由、または としてログインしているときに解決できるかどうかはわかりませんpublic/basic

于 2013-09-11T16:23:06.780 に答える
1

次のコードは、最初の問題で機能するはずです。おそらく、CellFeed のクエリ パラメータが原因で、2 番目の問題が発生します。他の依存 jar が使用可能かどうかを確認してください。私はずっと前にスプレッドシート API に取り組んでいました。これはあなたを助けるかもしれません。

    import java.net.URL;
    import java.lang.*;
    import java.util.List;
    import com.google.gdata.client.spreadsheet.FeedURLFactory;
    import com.google.gdata.client.spreadsheet.ListQuery;
    import com.google.gdata.client.spreadsheet.SpreadsheetService;
    import com.google.gdata.data.spreadsheet.CustomElementCollection;
    import com.google.gdata.data.spreadsheet.ListEntry;
    import com.google.gdata.data.spreadsheet.ListFeed;
    import com.google.gdata.data.spreadsheet.WorksheetEntry;
    import com.google.gdata.data.spreadsheet.WorksheetFeed;

    public class SpreadsheetsDemo {
        public static void main(String[] args) throws Exception{
            String application = "SpreadsheetsDemo";
            String key = "0AvNWoDP9TASIdERsbFRnNXdsN2x4MXMxUmlyY0g3VUE";

            SpreadsheetService service = new SpreadsheetService(application);

            URL url = FeedURLFactory.getDefault().getWorksheetFeedUrl(key, "public", "basic");

            WorksheetFeed feed = service.getFeed(url, WorksheetFeed.class);
            List<WorksheetEntry> worksheetList = feed.getEntries();
            WorksheetEntry worksheetEntry = worksheetList.get(0);
            CellQuery cellQuery = new CellQuery(worksheetEntry.CellFeedLink);
            CellFeed cellFeed = service.Query(cellQuery);

            foreach (CellEntry cell in cellFeed.Entries)
            {
                //Iterate through the columns and rows
            }
         }
        }
于 2013-09-13T22:16:18.677 に答える