【问题标题】:Office-JS API: Fetching filtered data from tableOffice-JS API:从表中获取过滤后的数据
【发布时间】:2016-11-09 21:29:54
【问题描述】:

如果过滤器在 Office-JS API 中处于活动状态,我正在尝试找出一种仅从表中获取过滤值的方法。

现在我想获取所有表格数据的唯一方法是从表格范围值属性:

var table = tables.getItemAt(0);
var tableRange = table.getRange();
tableRange.load("values");
ctx.sync().then(function () {
    // This returns all the values from the table, and not only the visible data
    var values = tableRange.values;
});

如果过滤器处于活动状态,我如何继续从表中获取可见值?

根据以前使用 Office Interop 的经验,我通过遍历表格范围的不同区域来实现相同的目标,但我无法找到与 Office-JS 中的区域等效的内容。

【问题讨论】:

    标签: javascript excel filter office-js


    【解决方案1】:

    作为 Excel JS API 1.3 的一部分,即将推出的下一波功能将包括一个新对象“RangeView”,它允许您仅读取 Range 对象的可见值。 这是 GitHub 上开放规范的链接 - https://github.com/OfficeDev/office-js-docs/tree/ExcelJs_1.3_OpenSpec/excel。 请注意,此功能目前尚不可用,但将在不久的将来提供。

    您的案子在桌子上的用法如下所示:

    var table = tables.getItemAt(0);
    var visibleView = table.getRange().getVisibleView();
    ctx.load(visibleView);
    ctx.sync().then(function () {
        var values = visibleView.values;
    });
    

    【讨论】:

    • 嗨菲利普。杰出的!这正是我所需要的。希望当我们的客户推动我们尽快完成此插件时,他们会尽快发布此插件。同时我想我将不得不与没有过滤器支持有关。
    • 我尝试了 Michael 的解决方法,它可以从绑定表中获取过滤后的结果,并将使用它直到 1.3 发布。感谢您提供的重要信息!
    • @MatsOftedal,Philip 提到的 API 很快就会进入 Beta 版...一旦它们出现在 dev.office.com/changelog上,您就会看到新的变化@
    • @MichaelZlatkovsky 谢谢!我会留意更新日志:-)
    【解决方案2】:

    仅获取过滤数据的一种方法是通过Binding.getDataAsync method,它采用filterType parameter

    Office.select("bindings#myTableBinding1").getDataAsync({
        coercionType: "table",
        filterType: "onlyVisible"
    },function(asyncResult){
        var values = (asyncResult.value.rows);
    });
    

    此代码假定您已经创建了与表的绑定。如果没有,可以先运行如下代码,使用表名调用Bindings.addFromNamedItemAsync

    Office.context.document.bindings.addFromNamedItemAsync("Table1","table",{
        id: "myTableBinding1"
    },function(asyncResult){
        // handle errors and call code sample #1
    });
    

    请注意,早在 Excel 2013 中就支持上述解决方案,因为它使用共享 API。 Excel 特定的 API 集尚不能仅返回未过滤的数据。

    -Michael Saunders,Office 插件产品经理

    【讨论】:

    • 嗨迈克尔。非常感谢您的解决方法!效果很好!作为一名来自 VSTO 互操作开发的开发人员,我意识到在使用新的 Javascript API 时必须有非常不同的想法。
    • Michael,提供的函数非常适合获取过滤后的数据,但由于它似乎返回了一个纯二维行数组,其中删除了过滤后的行,你知道有什么方法可以保留原始数据吗?未过滤的行号,以便在处理过滤结果后可以找到原始单元格?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2015-07-07
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多