【问题标题】:Partial CellFeed load部分 CellFeed 负载
【发布时间】:2015-02-28 08:34:04
【问题描述】:

大家新年快乐

目前,我正在使用以下默认方式访问和加载 Google 表格工作表:

URL metafeedUrl = new URL(SPREADSHEET_URL);
SpreadsheetEntry spreadsheet = service.getEntry(metafeedUrl, SpreadsheetEntry.class);
URL cellFeedUrl = ((WorksheetEntry) spreadsheet.getWorksheets().get(0)).getCellFeedUrl();

// Get entries as cells
feed = (CellFeed) service.getFeed(cellFeedUrl, CellFeed.class);

然后我使用它,等等。Everyting 工作得很好。

问题:

我即将部署应用程序并让它与一个包含数百行(如果不是数千行)单元格的工作表一起工作。对我来说,唯一相关的行通常是底部的 100-200 行

有没有办法部分加载 CellFeed,最好是从下往上? API是否提供了这种方式?

【问题讨论】:

  • 请澄清。您的示例代码不是 google-apps-script 但您将其标记为这样。已经有一个应用程序脚本答案。如果这不是您需要的,我可以提供另一个直接使用电子表格 api 的答案。
  • @ZigMandel 是的,我正在使用 Java g-spreadsheets API。标记已被删除。
  • @ZigMandel 我真的很感激能直接在 java 电子表格 API 中完成的答案
  • 我会尽快添加答案
  • @ZigMandel 感谢您的宝贵时间!

标签: google-sheets cells


【解决方案1】:

查看 API 本身,您可以使用单元提要或列表提要来做到这一点。
在单元格提要中,查看https://developers.google.com/google-apps/spreadsheets/#fetching_specific_rows_or_columns
您可以在那里指定要获取的最小/最大行/列,那里还有一个 java 示例。

获取数据的更有效方法是行提要,因为它发送的字节数更少:
https://spreadsheets.google.com/feeds/list/
使用未记录的“start-index”参数,因此它只能从该行开始读取。
我使用它并适用于“旧”和“新”表。
第一次您需要获取所有行(或尝试某种二进制查找来查找电子表格的最后一行)。
我没有使用 java api 库,它可能不允许使用未记录的参数。您始终可以直接从 java 或任何语言执行 url “获取”,并通过 https 直接使用电子表格 api。
我很久以前从这里得到这个提示:
https://groups.google.com/forum/#!topic/google-spreadsheets-api/dSniiF18xnM
并在这个 github 项目上使用它(javascript ajax 调用示例)
https://github.com/zmandel/Plus-for-Trello/blob/master/source/sql.js

【讨论】:

    【解决方案2】:

    我不知道任何 CellFeed,但您可以创建一个 HTML 提要,从任何电子表格中检索多个 ROWS,然后处理该 HTML,这对您有用吗?检索信息时的目标是什么? 例如。

    代码.gs

    function doGet() {
      return HtmlService.createTemplateFromFile("form").evaluate().setSandboxMode(HtmlService.SandboxMode.NATIVE);
    }
    
    function getLastLines( numLines, ssId, sheetName ){
      var sheet = SpreadsheetApp.openById(ssId).getSheetByName(sheetName);
      return JSON.stringify(sheet.getRange(sheet.getLastRow() - numLines, 1, numLines, sheet.getLastColumn()).getValues());
    }
    

    在form.html中

    <div id="arrayPlace"></div>
    <script>
    function changeDiv( res ){
        document.getElementById("arrayPlace").innerHTML = res;
    }
    
    function getUrlParameter(sParam)
    {
        var sPageURL = window.location.search.substring(1);
        var sURLVariables = sPageURL.split('&');
        for (var i = 0; i < sURLVariables.length; i++) 
        {
            var sParameterName = sURLVariables[i].split('=');
            if (sParameterName[0] == sParam) 
            {
                return sParameterName[1];
            }
        }
    }
    
    var numLines = getUrlParameter("numLines");
    var ssId = getUrlParameter("ssId");
    var sheetName = getUrlParameter("sheetName");
    
    google.script.run.withSuccessHandler( changeDiv ).getLastLines( numLines, ssId, sheetName );
    </script>
    

    而且 URL 会有额外的参数:

    https://script.google.com/macros/s/AKfycbwFLN-qqTcXXAVgR-aDa9h61yTa39kVhE2MwX9htRbIm2NN5I4/exec?numLines=5&ssId=1dJlNmtvcsWixEDnUz7GxnyLMZKXHwA-9uopYPUC8I4E&sheetName=Sheet1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多