乐于分享
好东西不私藏

WPS生成工资条,JSA宏模板!

WPS生成工资条,JSA宏模板!

今天主要有点,实战的WPS-JS宏代码,本次实战案例是根据工资表生成工资条,主要熟悉一下JS代码,感受一下和VBA代码的区别!
▍效果预览
下面动画演示一下JSA宏实现的工资条效果,代码基本OK!下面我们还是带大家看一下JSA的实现方式及和VBA中的一些差别!

▼ 动画演示

▍代码解析
定义名称基本现代的语法常用的就是const 和 let,快速区别使用哪一个,就是看这个变量后续是否发生变化,前者“不变”!
然后核心的对象API,90%基本户和VBA一样,只是严格区分大小写!
比如CurrentRegion、ActiveSheet  是不是都非常熟悉!
在JSA宏中,Msgbox也可以继续使用,通用也可以使用JS中alert,但是没有Mgbox功能丰富,如果只是简单提示可以用一下!
其他if语法等就要去学习一下JS语法了,基本都是{} 风格!
return属于VBA中没有的,但是类似Function中的 exit Function语法,表示返回结果,如果单用,相当于退出了!
下面的代码核心就是获取一下要处理的工作表对象,赋值给ws,方便调用,获取要处理的行数和列数,提示一下用户操作不可撤销,做好数据备份管理!
代码的第二部分是核心,基本就是一个for循环遍历每一行,插入标题和一行空行
注意下for语法和VBA肯定是完全不同的,for(初始值;判断;步长)
这里i–,相当于step -1,也就是倒序遍历!
你会发现如果你有VBA基础,99%的Excel对象模型API都不用重新学习!
核心放在学习JS基础知识即可!
▍源码分享
/* * 功能:将工资汇总表自动转换为工资条格式 */function 工资条自动生成() {  const ws = ActiveSheet;  const dataRange = ws.Range("A1").CurrentRegion;  const totalRows = dataRange.Rows.Count;  const totalCols = dataRange.Columns.Count;  if (totalRows < 3) {    MsgBox("数据不足!\n需要至少1行表头 + 2行数据才能生成工资条。"48"提示");    return;  }  const confirm = MsgBox(    "即将为 " + (totalRows - 1) + " 名员工生成工资条\n\n⚠" +     	"操作不可撤销,建议先备份文件\n\n是否继续?",    36,    "确认生成"  );  if (confirm !== 6return// 用户点击"否"  Application.ScreenUpdating = false;  // 获取表头行范围(第1行)  const headerRange = ws.Rows(1);  // 从最后一条数据往前处理(避免插入行导致行号错位)  for (let i = totalRows; i >= 3; i--) {    ws.Rows(i).Insert(xlShiftDown);       // 插入空行(分隔用)    ws.Rows(i).Insert(xlShiftDown);       // 再插入一行放表头    headerRange.Copy(ws.Rows(i));          // 复制表头到插入的行  }  // 自动调整列宽  const lastCol = String.fromCharCode(64 + totalCols);  ws.Range("A1:" + lastCol + "1").Columns.AutoFit();  Application.ScreenUpdating = true;  MsgBox(    "工资条生成完成!\n共生成 " + (totalRows - 1) + " 张工资条",    64,    "完成"  );}
今天的内容就到这里,更多JSA实战代码会陆续整理到JSA系列教程的实战部分,公众号也会做一下同步分享!