Office-JS API:从表中获取过滤的数据

我试图找出一种方法来从表中提取只过滤值,如果在Office-JS API中的活动filter。

现在唯一的办法就是从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; }); 

如果filter处于活动状态,我可以如何继续从表中只提取可见值的任何想法?

从以前的Office Interop经验来看,我已经通过遍历表范围的不同区域实现了同样的function,但是我无法find相当于Office-JS中的区域。

一种只获取过滤数据的方法是通过Binding.getDataAsync方法 ,该方法使用filterType参数 。

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

这段代码假设你已经创build了一个绑定到表。 如果没有,可以先运行下面的代码,它使用表名来调用Bindings.addFromNamedItemAsync :

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

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

-Michael Saunders,PM for Office加载项

作为Excel JS API 1.3的一部分即将推出的下一个function将包括一个新的“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; });