前面,我们做过打开工作簿获取数据的案例。只需要使用工作簿对象中的Open方法即可。但是当需要处理的工作簿较多时,窗口会一直跳来跳去,不太友好,特别是对于有强迫症的人来说,简直是噩梦级别的操作,比如说UP。所以,当我们读取工作簿数据时,能不能隐藏窗口进行获取呢?答案当然是可以的,JS宏中也提供了对应的API。接下来,我们通过实际案例来理解这个API。
一、明确任务目的
任务目标:获取并分析数据源工作簿中的数据
任务要求:
1、计算每年、每月、每种商品类型的销售额数据
2、获取数据时要求隐藏工作表窗口
3、将计算动作绑定在一个新生成的按钮上
4、使用ES6类,或构造函数来完成该案例
二、查看数据源结构
本次案例数据源中共有三个sheet表
1、商品类型表

2、商品销售情况表

3、商品类型名称

显然,要计算每年、每月、每种商品类型的销售额数据,我们需要将三个表整合在一起,然后再进行求和汇总。
三、逻辑整理与代码编写
1、定义一个构造函数
function MyClass() {
if(!(this instanceof MyClass)) throw new Error("只能通过new来实例化");
}
2、数据获取
注意,在获取数据时我们需要隐藏工作簿窗口。这里,我们可以利用OLE对象来完成这一操作,示例代码如下:
function MyClass() {
if(!(this instanceof MyClass)) throw new Error("只能通过new来实例化");
//使用OLE对象获取工作簿中的数据,并隐藏对象
MyClass.prototype.getDataWithHideWorkbookWindow = function(path) {
//创建OLE对象
let obj = ActiveSheet.Shapes.AddOLEObject("Excel.Sheet.8", path);
obj.Visible=false; //形状不可见
let res = {}, n;
let wb = obj.DrawingObject.Object; //获取工作簿对象
n = wb.Sheets.Count; //获取工作表对象
for(let i=1; i<=n; i++){
let sht = wb.Sheets(i);
res[sht.Name] = sht.Range("A1").CurrentRegion.Value2; //获取数据
}
wb.Close(); //关闭,可以不写
obj.Delete(); //删除OLE对象
return res;
}
}
getDataWithHideWorkbookWindow 实例方法中,使用了一个新的API:Shapes.AddOLEObject,官方解释如下图所示:

语法如下
express.AddOLEObject(ClassType, Filename, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)

最低0.47元/天 解锁文章
1623

被折叠的 条评论
为什么被折叠?



