如果过滤器在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中的区域相同的内容。
答案 0 :(得分: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
});
请注意,早在Excel 2013中就支持上述解决方案,因为它使用共享API。特定于Excel的API集还不具备仅返回未过滤数据的功能。
-Michael Saunders,办公室加载项的下午
答案 1 :(得分: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;
});