WPS JS宏入门案例集锦
JS宏官方API文档:https://qn.cache.wpscdn.cn/encs/doc/office_v19/index.htm
批量创建工作表/簿
批量创建工作表:
function 批量创建工作表(){
for (var city of ["成都","上海","北京"]){
let sht = Worksheets.Add();
sht.Name = city;
}
}
批量创建工作簿:
function 批量创建工作簿(){
for (var city of ["成都","上海","北京"]){
book = Workbooks.Add();
book.SaveAs(`E:/tmp/${city}`);
book.Close();
}
}
若book.SaveAs不传入全路径,则默认可能保存到我的文档文件夹中。
批量拆分工作表到工作簿
数据如下:
执行代码:
function 批量拆分工作表(){
for (var sh of Sheets){
// 如果既不指定 Before 也不指定 After,则新建一个工作簿,其中包含复制的工作表。
sh.Copy();
ActiveWorkbook.SaveAs(`E:/VBA/wps/${sh.Name}.xlsx`);
ActiveWorkbook.Close();
}
}
分解出3个独立的文件:
批量判断处理单元格数据
数据和需求如下:
简单的方法就是直接筛选再复制粘贴,但是现在我们需要完全基于js宏的语法实现:
function 分数筛选(){
var Arr1=[];
var Arr2=Range("a2:b13").Value();
for (var row of Arr2){
if (row[1]>=100){
Arr1.push(row);
}
}
Range("d4").Resize(Arr1.length,2).Value2=Arr1
}
运行后:
工资条制作
数据如下:
执行如下代码:
function 工资条制作()
{
Application.DisplayAlerts=false;
let src=Sheets("工资表");
for(let sht of Sheets){
if(sht.Name=="结果") sht.Delete();
}
Application.DisplayAlerts=true;
var sht=Worksheets.Add();
sht.Name="结果";
for(i=0;i
src.Range("a1:m4").Copy();
sht.Cells.Item(5*i+1,1).PasteSpecial();
src.Range(`A${i+5}:M${i+5}`).Copy();
sht.Cells.Item(5*i+5,1).PasteSpecial();
}
sht.Activate()
}
Range("a1:m4").Select();
for (var i=1;i
Selection.Copy();
ActiveCell.Offset(5, 0).Range("A1:M4").Insert(xlShiftDown, undefined);
Application.CutCopyMode = false;
ActiveCell.Offset(5, 0).Range("A1:M4").Select();
}
}
var vs=Range("A1").CurrentRegion.Value().flat();
// 过滤掉空值并去重
vs=Array.from(new Set(vs.filter(v=v!=undefined)));
// 一维数组默认赋值给一行,赋值给一列需要先转置二维
vs = WorksheetFunction.Transpose(vs);
var wb = Workbooks.Add();
wb.Sheets(1).Range("A1").Resize(vs.length,1).Value2 = vs;
}
blockquote
p注意:上面的代码使用JavaScript的语法对数组进行了去重。/p
pre class="brush:python;toolbar:false"Array.from(new Set(arr))
/pre
p过滤空值:/p
pre class="brush:python;toolbar:false"arr.filter(v=>v!=undefined)
最终得到一列:
批量合并工作表并添加来源表名
原数据:
执行代码:
function 合并工作表数据(){
var NewArr=[],n=1;
for (var ws of Sheets){
var Arr=ws.Range("a1").CurrentRegion.Value();
if (n++ ==1){var title=Arr[0].concat("工作表名")};
delete Arr[0]
Arr.forEach(ar=>NewArr.push(ar.concat(ws.Name)));
}
NewArr.unshift(title);
var wb=Workbooks.Add();
wb.Sheets(1).Range("a1").Resize(NewArr.length,NewArr[0].length).Value2=NewArr;
}
成功合并得到如下结果:
语音朗读
代码如下:
function Workbook_Open()
{
Application.Speech.Speak("美好的一天就从这一刻开始吧!",true)
}
function Workbook_NewSheet(Sh)
{
Application.Speech.Speak("果然狠人老表,区区几张sheet是不够你消遣的!",true)
}
function Application_WorkbookBeforeClose(Wb, Cancel)
{
Application.Speech.Speak("就想问老板,可以下班了吗?")
}
function Application_SheetSelectionChange(Sh, Target){
if(Sh.Name!="词汇"|Target.Value()==undefined) return;
Application.Speech.Speak(Target.Value());
}
保存上面的代码后,当打开或关闭该文件或新建工作表都会朗读对应的文字。
对于词汇这张工作表,点击任何有值的单元格都会对其进行朗读。
Application.Speech.Speak第二个参数传入true表示异步,默认为同步。
富文本弹窗
alert函数支持传入HTML:
function testAlert_CSS(){
let foo = `
Hi
Hi ${new Date().toLocaleDateString()}
`;
alert(foo)
}
执行效果:
判断目标是否在指定区域内
function _m_isInArea(uArea,cell){
uArea = typeof(uArea) =="string" ? Range(uArea):uArea;
cell = typeof(cell) =="string" ? Range(cell):cell;
if(uArea.Parent.Name!=cell.Parent.Name) return false;
let s_row=uArea.Row,e_row=s_row+uArea.Rows.Count-1;
let s_col=uArea.Column,e_col=s_col+uArea.Columns.Count-1;
let t_row = cell.Row,t_col = cell.Column;
// Console.log(`${s_row}-${e_row},${s_col}-${e_col},(${t_row},${t_col})`);
return s_row
Console.log(_m_isInArea("A2:C20","B3"));
Console.log(_m_isInArea("A2:C20","D3"));
}
let txtFile = "E:/tmp/a.txt";
let f = FreeFile() ;
Open(txtFile,f,jsOutput,jsWrite);
Write(f,"123");
Write(f,"456,789");
Write(f,"aaa,bbb");
Close();
Console.clear()
let fNumber = FreeFile()
Open(txtFile, fNumber,jsInput)
while(!EOF(fNumber)) {
let p=LineInput(fNumber);
Console.log(p)
}
Close(fNumber)
}
name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
name}, 你今年${age}岁了!`;
被执行的代码块
}
document.write(cars[i] + "
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!









