java - 如何在 GAE 中仅获取包含超过 80K 行和超过 7 列的 Google 电子表格的前四行(使用 Java)

标签 java excel google-app-engine google-sheets-api

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

对于只有几千行的电子表格,没有问题。但对于超过 80K 行的电子表格总是会出现超时异常。

我引用了此链接,因为我发现它与我的担忧类似:

Unable to complete the HTTP request when using SpreadSheet API

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

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

是否有任何替代解决方案,因为我只需要提取前 4 - 5 行而不是整个电子表格到我的 Web 应用程序中?

请提出建议和建议。

下面是一段代码:

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

最佳答案

此问题的解决方案已确定。问题是由于使用了列表提要,在我的代码中,列表提要用于连接到电子表格,并且需要大量时间和内存来将所有电子表格存储在变量中:

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

解决方案是使用基于细胞的 Feed。无论电子表格有多大,我只需要获取几行,因此,使用基于单元格的提要,您可以将参数传递给电子表格 URL,并且只能获取特定数量的行和列。

您可以引用enter link description here关于基于列表和单元格的提要的文档。

关于java - 如何在 GAE 中仅获取包含超过 80K 行和超过 7 列的 Google 电子表格的前四行(使用 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39386294/

相关文章:

java - joda时间消耗太多内存

java - float类toString方法

php - Yii2 bower 错误heroku

java.sql.异常: attempt to write on read-only database in java Swing Application

java - Java Base64 编码的 Ruby Base64 编码

excel - 在 Excel 中串联 1000 多个单元格以识别重复项

VBA Excel 如何插入预定行的标题

google-app-engine - 与对象更改通知相比,Google Club Pub/Sub 的可扩展性如何

google-app-engine - 从 Go on AppEngine 中的 init() 函数获取 URL

python - 无法使用 NDB get_by_id 获取命名空间中的实体