2016-07-07 98 views
1

我想弄清楚如何在Office-JS API中激活过滤器时只从表格中提取过滤值的方法。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中的区域等效的东西。

回答

1

获取仅筛选数据的一种方法是通过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 
}); 

注意,因为它使用了共享的API之上的解决方案的支持,早在Excel的2013年Excel特定的API集还不具有仅返回未过滤数据的功能。

- 迈克尔·桑德斯,PM为Office插件

+0

喜迈克尔。非常感谢您的解决方法!它很棒! 作为来自VSTO Interop开发的开发人员,我认识到使用新的JavaScript API时必须考虑非常不同。 –

+0

Michael,提供的函数在获取过滤的数据方面效果很好,但由于它似乎返回一个纯粹的二维数组,其行列已被删除,您是否知道如何保留原始未过滤的行号,以便我可以处理过滤结果后找回原始单元格? –

1

的功能即将推出下一波为Excel JS的API 1.3的一部分,将包括一个新的对象“RangeView”,让您只读关闭可见值范围对象。 以下是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; 
}); 
+0

嗨菲利普。 太棒了!这正是我需要的。希望他们能尽快发布,因为我们的客户正在推动我们尽快完成这个插件。同时我想我将不需要过滤器支持。 –

+0

我试着从迈克尔的解决方法,它的工作原理是从绑定表中获取过滤结果,并将使用,直到1.3出来。感谢您的好信息! –

+0

@MatsOftedal,菲利普提到的API将很快推出Beta版...一旦它们启动,您将看到新的更改http://dev.office.com/changelog –