1

ドキュメント リスト API を使用して Google ドキュメントでスプレッドシート テンプレートのコピーを作成したところ、次のことがわかりました。

1. title queries works fine
2. content queries are not working(*) or partially working(**)
(*)for majority of spreadsheets: I searched every word from the content of a spreadsheet and I get no results
(**) for a few spreadsheets I find results for some words that are copied from template; the particular words queries are not working
3. If I update the spreadsheet after a few minutes all queries work fine.
(I make this searches from UI)

このファイルを作成する手順は次のとおりです。

1. Copy spreadsheet template to root

private String sendPostCopyRequest(String authorizationToken, String resourceID, String title, int noRetries) throws IOException{ 
    /*
    resourceId = resource id for the template that i want to copy
    title = the title of the new file created
    */      
    String urlStr = "https://docs.google.com/feeds/default/private/full";
    URL url = new URL(urlStr); 
    HttpURLConnection copyHttpUrlConn = (HttpURLConnection) url.openConnection(); 
    copyHttpUrlConn.setDoOutput(true); 
    copyHttpUrlConn.setRequestMethod("POST"); 

    String outputString = "<?xml version='1.0' encoding='UTF-8'?>" +
            "<entry xmlns=\"http://www.w3.org/2005/Atom\"> " +
            "<id>https://docs.google.com/feeds/default/private/full/" + resourceID +"</id>" +
            " <title>" + title + "</title></entry>";

    copyHttpUrlConn.setRequestProperty("GData-Version", "3.0");
    copyHttpUrlConn.setRequestProperty("Content-Type","application/atom+xml");

    copyHttpUrlConn.setRequestProperty("Content-Length", outputString.length() + "");
    copyHttpUrlConn.setRequestProperty("Authorization", "GoogleLogin auth=" + authorizationToken);

    OutputStream outputStream = copyHttpUrlConn.getOutputStream(); 

    outputStream.write(outputString.getBytes()); 
    copyHttpUrlConn.getResponseCode(); 

    return readIdFromResponse(copyHttpUrlConn.getInputStream()); 
}

2. I update some cells using this method:

public boolean setCellValue(SpreadsheetService spreadSheetService, SpreadsheetEntry entry, int worksheetNumber, String position, String value) throws IOException, ServiceException {

    List<WorksheetEntry> worksheets = entry.getWorksheets();
    WorksheetEntry worksheet = worksheets.get(worksheetNumber);
    URL cellFeedUrl = worksheet.getCellFeedUrl();
    CellQuery query = new CellQuery(cellFeedUrl);
    query.setReturnEmpty(true);
    query.setRange(position);
    CellFeed cellFeed = spreadSheetService.query(query, CellFeed.class);
    CellEntry cell = cellFeed.getEntries().get(0);

    cell.changeInputValueLocal(value);
    cell.update();
    return true;

}

3. I move the created file to a new folder (collection)

    public DocumentListEntry moveSpreadSheet(DocsService docsService, String entryId, String destinationFolderDocId) throws MalformedURLException, IOException, ServiceException {

    DocumentListEntry newEntry = null;
    newEntry = new com.google.gdata.data.docs.SpreadsheetEntry();
    newEntry.setId(entryId);
    String destFolderUri = "https://docs.google.com/feeds/default/private/full/folder%3A"+ destinationFolderDocId + "/contents";

    return docsService.insert(new URL(destFolderUri), newEntry);

}

(the same results with gdata java sdk api 1.4.5, 1.4.6, 1.4.7)

これは 2011 年 12 月 23 日から発生します (近似値あり)。この日付より前に同じコードで作成されたすべてのスプレッドシートでは、すべてのクエリが正常に機能します。

リクエストに応じて、その他の情報を提供できます。

アップデート:

  1. この問題は、スプレッドシートを変換してアップロードする場合にも発生するようです。
  2. 作成/アップロード後の一定期間(〜2時間)後にファイルを更新すると、クエリはそれらを結果に返します。
4

1 に答える 1

0

問題は、スプレッドシートのコンテンツの Google インデックス作成が遅いことに関連している可能性があります。

https://groups.google.com/a/googleproductforums.com/d/msg/docs/vEhI_HkKX3I/MGKqkryrx90J

「現時点では、スプレッドシートに書き込んだコンテンツをインデックス化するのに約 10 分かかる場合があります。そのため、何かを入力してすぐに検索すると、ドキュメントの結果のリストにまだ表示されない可能性があります。あと数分待ってください(これを高速化するために取り組んでいます)」

于 2012-05-07T08:07:10.013 に答える