如何只读取GAE中包含超过80K行和7列以上的Google电子表格的前四行(使用Java)

我有一个用例,试图只抓取一个已公开发布的google电子表格的前四行,并将其显示在网页上。

对于只有几千行的电子表格,没有任何问题。 但是对于80K以上的电子表格,总是发生超时exception。

我已经提到这个链接,因为我发现它与我的关注类似:

无法在使用SpreadSheet API时完成HTTP请求

并使用超时和重试超时,但似乎进入无限循环。

我正在使用“ListFeed”。 是否有可能是因为ListFeed加载整个电子表格,应用程序需要更多的时间来加载?

有什么替代解决scheme,因为我只需要获取第一个4-5行,而不是整个电子表格到我的Web应用程序?

请提出build议。

以下是这段代码:

  1. 超时并重试:

    ListFeed lf = null; while (timeoutflag != 1) { try { lf = service.getFeed(url, ListFeed.class); timeoutflag = 1; } catch (RuntimeException e) { timeoutinc += 2; service.setConnectTimeout(timeoutinc * 3000); service.setReadTimeout(timeoutinc * 3000); } } 
  2. 获取行数:

     for (int k = 0; k < 5; k++) { ListEntry le = lf.getEntries().get(k); CustomElementCollection cec = le.getCustomElements(); for (int j = 0; j < colcount; j++) { resp.getWriter().println("<td>"); resp.getWriter().println(cec.getValue(colname[j])); resp.getWriter().println("</td>"); } } 

这个问题的解决scheme已经确定。 问题是因为在我的代码中使用了列表提要,用于连接到电子表格的列表提要,并需要很多时间和内存来存储variables中的所有电子表格:

  lf = service.getFeed(url, ListFeed.class); //Thus there used to be connection sometimes and also memory overflow exceptions in case of larger spreadsheets. 

解决scheme是使用基于细胞的饲料。 我只需要抓取几行,不pipe电子表格有多大,因此,使用基于单元格的Feed可以将parameter passing给电子表格url,并且只能抓取特定数量的行和列。

您可以参考列表和基于单元格的Feed中的链接描述文档。

发布代码示例总能帮助大家更好地理解问题。

我不知道你实际上对sheet API做了什么请求,但是你是否试过指定阅读文档时需要的单元格的范围? 如果您不确定如何操作,可以参考此页面 。

忘了提及 – 使用这种方法,您可以每次读取文档的块,处理它,并获取下一块行(如果文档包含太多的行)。