Javascript Office JS API:从表中获取筛选数据

Javascript Office JS API:从表中获取筛选数据,javascript,excel,filter,office-js,Javascript,Excel,Filter,Office Js,我试图找出一种方法,如果在Office JS API中过滤器处于活动状态,则只从表中获取过滤后的值 目前,获取所有表数据的唯一方法是从table range values属性: var table = tables.getItemAt(0); var tableRange = table.getRange(); tableRange.load("values"); ctx.sync().then(function () { // This returns all the values f

我试图找出一种方法,如果在Office JS API中过滤器处于活动状态,则只从表中获取过滤后的值

目前,获取所有表数据的唯一方法是从table range values属性:

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中找到与区域等效的区域。

仅获取过滤数据的一种方法是通过,这需要一个时间

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

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


-Michael Saunders,Office插件项目经理

作为Excel JS API 1.3的一部分,即将推出的下一波功能将包括一个新对象“RangeView”,它允许您仅读取范围对象之外的可见值。 这里有一个链接指向GitHub上的开放规范-。 请注意,此功能目前还不可用,但将在不久的将来提供

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

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将很快进入测试版。。。一旦在@MichaelZlatkovsky上,你就会看到新的变化,谢谢!我会留意变化日志:-)嗨,迈克尔。非常感谢您的解决方案!它工作得很好!作为一名来自VSTO Interop development的开发人员,我意识到在使用新的Javascript API时,人们的想法必须非常不同。Michael,提供的函数在获取过滤数据方面效果非常好,但由于它似乎返回一个纯粹的2d行数组,其中过滤的行被删除,您知道有什么方法可以保留原始未过滤的行号,以便我在处理过滤结果后可以找到原始单元格?
Office.context.document.bindings.addFromNamedItemAsync("Table1","table",{
    id: "myTableBinding1"
},function(asyncResult){
    // handle errors and call code sample #1
});
var table = tables.getItemAt(0);
var visibleView = table.getRange().getVisibleView();
ctx.load(visibleView);
ctx.sync().then(function () {
    var values = visibleView.values;
});