如何在 GAE 中仅获取包含超过 80K 行和超过 7 列的 google 电子表格的前四行(使用 Java)
How to fetch only first four rows of a google spreadsheet that contains more than 80K rows and more than 7 columns in GAE (using Java)
我有一个用例,我试图仅获取已公开发布的 google 电子表格的前四行并将其显示在网页上。
对于只有几千行的电子表格,没有问题。但是对于超过 80K 行的电子表格总是给出超时异常。
我提到了这个 link,因为我发现它与我的担忧相似:
并使用了超时和重试超时,但它似乎进入了无限循环。
我正在使用 "ListFeed"。是否可能因为 ListFeed 加载了整个电子表格,所以应用程序需要更多时间来加载?
是否有任何替代解决方案,因为我只需要获取前 4 - 5 行而不是整个电子表格到我的 Web 应用程序中?
请指教指教
代码如下:
超时重试:
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);
}
}
正在获取行:
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>");
}
}
贴出代码示例总能帮助大家更好地理解问题。
我不确定您对工作表的实际要求是什么 API,但是您是否尝试过在阅读文档时指定所需的单元格范围?
如果您不确定如何操作,可以参考 this page。
忘了说——使用这种方法,您每次都可以读取文档块、处理它并获取下一块行(如果文档包含太多行)。
已确定此问题的解决方案。问题是因为使用列表提要,在我的代码中,列表提要用于连接到电子表格并且需要大量时间和内存来将所有电子表格存储在变量中:
lf = service.getFeed(url, ListFeed.class); //Thus there used to be connection sometimes and also memory overflow exceptions in case of larger spreadsheets.
解决方案是使用基于细胞的饲料。无论电子表格有多大,我只需要获取几行,因此,使用基于单元格的提要,您可以将参数传递给电子表格 url,并且只能获取特定数量的行和列。
您可以参考 enter link description here 有关基于列表和单元格的供稿的文档。
我有一个用例,我试图仅获取已公开发布的 google 电子表格的前四行并将其显示在网页上。
对于只有几千行的电子表格,没有问题。但是对于超过 80K 行的电子表格总是给出超时异常。
我提到了这个 link,因为我发现它与我的担忧相似:
并使用了超时和重试超时,但它似乎进入了无限循环。
我正在使用 "ListFeed"。是否可能因为 ListFeed 加载了整个电子表格,所以应用程序需要更多时间来加载?
是否有任何替代解决方案,因为我只需要获取前 4 - 5 行而不是整个电子表格到我的 Web 应用程序中?
请指教指教
代码如下:
超时重试:
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); } }
正在获取行:
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>"); } }
贴出代码示例总能帮助大家更好地理解问题。
我不确定您对工作表的实际要求是什么 API,但是您是否尝试过在阅读文档时指定所需的单元格范围? 如果您不确定如何操作,可以参考 this page。
忘了说——使用这种方法,您每次都可以读取文档块、处理它并获取下一块行(如果文档包含太多行)。
已确定此问题的解决方案。问题是因为使用列表提要,在我的代码中,列表提要用于连接到电子表格并且需要大量时间和内存来将所有电子表格存储在变量中:
lf = service.getFeed(url, ListFeed.class); //Thus there used to be connection sometimes and also memory overflow exceptions in case of larger spreadsheets.
解决方案是使用基于细胞的饲料。无论电子表格有多大,我只需要获取几行,因此,使用基于单元格的提要,您可以将参数传递给电子表格 url,并且只能获取特定数量的行和列。
您可以参考 enter link description here 有关基于列表和单元格的供稿的文档。