[ol]//执行宏调用ExecuteExcel4Macro
var 表应用对象 = new ActiveXObject("Excel.Application"); //创建表格程序对象
var 表应用 = 表应用对象.Application; //设置对象变量,以减少引用对象的书写长度
//获取鼠标指针位置
var 鼠标坐标=获取鼠标位置();
var 水平=鼠标坐标[0],垂直=鼠标坐标[1];
//移开鼠标指针
var 新水平=500,新垂直=300;
var 鼠标移动结果=表应用.ExecuteExcel4Macro('CALL("User32","SetCursorPos","AJJ",'+新水平+','+新垂直+')');
var 字符串="表应用对象JS执行宏调用";
var 字符串字节数=表应用.ExecuteExcel4Macro('LENB("'+字符串+'")');
var 字节数计算="字符串:"+字符串+'\t字节数:'+字符串字节数+"\t("+水平+','+垂直+")";
WScript.Echo(字节数计算+"\n设置鼠标位置执行结果:"+鼠标移动结果+'\n按 空格/回车 鼠标指针回到原位');
//弹窗延时后,鼠标指针移回原位
var 延时结果=表应用对象.Application.ExecuteExcel4Macro('CALL("Kernel32","Sleep","JJ",800)');
设置鼠标位置(水平,垂直);
表应用对象.Quit(); //结束应用
WScript.Quit(); //结束脚本
//-----函数-----//
function 获取鼠标位置(){ //返回坐标数组[x,y]
var 内存地址=申请虚拟内存(8);
var 结果=表应用.ExecuteExcel4Macro('CALL("User32","GetCursorPos","AJ",'+内存地址+')'); //参数:4+4字节坐标结构
var 坐标=内存读取数据(内存地址,8);
释放虚拟内存(内存地址);
return 坐标;
}
function 设置鼠标位置(水平,垂直){
var 鼠标移动结果=表应用.ExecuteExcel4Macro('CALL("User32","SetCursorPos","AJJ",'+水平+','+垂直+')');
return 鼠标移动结果;
}
function 申请虚拟内存(字节数){ //返回内存地址
var 内存地址=表应用.ExecuteExcel4Macro('CALL("Kernel32","VirtualAlloc","JJJJJ",0,'+字节数+','+0x3000+',4)');
return 内存地址;
}
function 释放虚拟内存(内存地址){
表应用.ExecuteExcel4Macro('CALL("Kernel32","VirtualFree","JJJJ",'+内存地址+',0,'+0x8000+')');
}
function 内存读取数据(内存地址,字节数){ //返回数组
var 偏移,i,读取字节=[],读出数据,数据数组=[];
for(偏移=i=0;偏移=4){读取字节[i]=4;偏移+=4;}
else{if(字节数-偏移>=2){读取字节[i]=2;偏移+=2;}
else{if(字节数-偏移==1){读取字节[i]=1;偏移++;}}}
}
for(偏移=i=0;偏移复制代码
优点:不用打开办公软件。
缺点:JScript比较老,不支持ES6语法。调试不太方便。

