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; });