小工具知识网

当前位置: 首页 > 行业知识 > WPS JS宏入门案例集锦

行业知识

WPS JS宏入门案例集锦

2026-10-27 11:02:43 来源:互联网转载

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;isrc.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;iSelection.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 Array.from(new Set(arr))/pre p过滤空值:/p pre 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}  // 返回 objecttypeof new Date()             // 返回 objecttypeof function () {}         // 返回 functiontypeof myCar                  // 返回 undefined (如果 myCar 没有声明)typeof null                   // 返回 objectname}, 你今年${age}岁了!`;    被执行的代码块}     document.write(cars[i] + "

上一篇:方舟oc服务器怎么进?

下一篇:点赞视频轻松下载,一键掌握视频下载技巧!