自动化办公 WPS 表格 JSA 宏开发教程(代码示例合集)
文章目录
- JSA 简介
- 什么是 JSA 宏?
- JSA 宏的主要特性
- JSA 宏常见应用场景
- JSA 宏开发工具
- JavaScript 教程
- 获取目录路径
- 文件操作
- 打开桌面目录中的 demo.xlsx
- 在打开的多个文件中选择 test.xlsx
- 保存 test.xlsx 当前的修改
- 将当前文件另存为 demo.xlsx
- 工作表操作
- 新建工作表
- 选择工作表
- 获取工作表总行数
- 获取工作表总行数与总列数
- 行与列操作
- 删除行与列
- 插入行与列
- 单元格操作
- 选择单元格
- 选中多个单元格
- 单元格赋值
- 单元格自动填充
- 设置单元格字体颜色和背景
- 设置单元格日期时间格式
- 设置单元格宽高
- 单元格对齐
- 设置字体与字号
- 合并单元格操作
- 插入本地图片
- JSA 条件语句
- if 判断
- 判断单元格空值
- for 循环
- switch 语句
- 弹出窗体
- 输入框
- 提醒框
- JSA 类与对象
- URL 转图片
JSA 简介
什么是 JSA 宏?
- JSA (JavaScript for Automation) 是 WPS Office 特有的宏脚本语言。
- 它基于 JavaScript 语法,结合 WPS Office 提供的 API,可以对 文字(Writer)、表格(Spreadsheets)、演示(Presentation) 等文档进行自动化操作。
- 类似于 Microsoft Office 的 VBA 宏,但 WPS 宏使用 JavaScript,更符合现代开发习惯。
JSA 宏的主要特性
-
基于 JavaScript
- 使用 ES 标准语法,门槛低,上手快。
- 开发者如果熟悉 Web 前端或 Node.js,会比较容易过渡。
-
跨应用统一 API
- 一套 JSA 脚本可以操作 WPS 的不同组件(文字/表格/演示)。
- 提供对象模型,比如 Application、Documents、Worksheets 等。
-
与 WPS 深度集成
- 可以操作文档内容:增删改查、批量处理、格式修改。
- 可以绑定到按钮/菜单,或者自动执行。
-
跨平台
- 理论上支持 Windows / Linux / macOS 版本的 WPS(不同版本支持度略有差异)。
JSA 宏常见应用场景
- 批量文档处理:批量替换文字、格式统一、批量导出 PDF。
- 表格自动化:数据统计、批量填充、生成报表。
- 演示文稿处理:批量插入图片、统一样式。
- 自动化办公:生成合同、数据录入、批量打印。
JSA 宏开发工具

JavaScript 教程
- https://wangdoc.com/javascript/
- https://wangdoc.com/es6/
获取目录路径
function Macro() {
// 获取桌面目录路径
const desktopPaht = Env.GetDesktopPath();
alert(desktopPaht);
// 获取桌面目录路径
const path = (ThisWorkbook.Path || Application.DefaultFilePath);
alert(path);
}
文件操作
打开桌面目录中的 demo.xlsx
function Macro6() {
Workbooks.Open("/Users/wufengsheng/Desktop/demo.xlsx", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true);
}
在打开的多个文件中选择 test.xlsx
function Macro() {
Windows.Item("test.xlsx").Activate();
Range("A1").Select();
Selection.Formula = "ABC";
}
保存 test.xlsx 当前的修改
function Macro() {
Application.RecentFiles.Add("/Users/wufengsheng/Desktop/test.xlsx");
ActiveWorkbook.Save();
}
将当前文件另存为 demo.xlsx
function Macro() {
Application.RecentFiles.Add("/Users/wufengsheng/Desktop/demo.xlsx");
ActiveWorkbook.SaveAs("/Users/wufengsheng/Desktop/demo.xlsx", undefined, undefined, undefined, undefined, undefined, xlNoChange, 1, -1, undefined, undefined);
}
工作表操作
新建工作表
function Macro() {
const sheet = Worksheets.Add(null, Sheets(Sheets.Count));
sheet.Name = 'Demo2';
}
选择工作表
function Macro() {
// 选择第1个 Sheet
const sheet = Sheets.Item(1);
alert(sheet.Name);
// 根据名称选择 Sheet
const sheet2 = Sheets.Item("Demo2");
alert(sheet2.Name);
}
function Macro() {
Sheets.Item("Demo2").Activate();
Range("B1").Select();
Selection.Formula = "ABC";
}
function Macro() {
// 选择当前工作表
const sheet = ThisWorkbook.ActiveSheet;
alert(sheet.Name);
}
获取工作表总行数
function Macro() {
// 获取正在使用的工作表总行数
const count = ActiveSheet.UsedRange.Rows.Count;
alert(count);
}
获取工作表总行数与总列数
function Macro() {
const wb = Workbooks.Item(1);
// 选择第1个 Sheet
const sheet = wb.Worksheets(1);
alert(sheet.Name);
// 工作表总行数
const rowCount = sheet.UsedRange.Cells.Rows.Count;
alert(rowCount);
// 工作表总列数
const colCount = sheet.UsedRange.Columns.Count;
alert(colCount);
}
行与列操作
删除行与列
function Macro() {
Rows.Item("1:1").Select();
Selection.Delete(xlShiftUp);
Columns.Item("B:B").Select();
Selection.Delete(xlShiftToLeft);
}
插入行与列
function Macro() {
Rows.Item("2:2").Select();
(obj=>{
obj.Insert(xlShiftDown, undefined);
obj.Select();
})(Rows.Item("2:3"));
Columns.Item("B:B").Select();
(obj=>{
obj.Insert(xlShiftToRight, undefined);
obj.Select();
})(Columns.Item("B:D"));
}
单元格操作
选择单元格
function Macro() {
const sheet = Sheets.Item(1);
// 获取 A1 单元格
const A1 = sheet.Range("A1");
// 获取 A1 单元格的值
alert(A1.Value2);
// 获取 A2 单元格
const A2 = sheet.Range("A" + 2);
// 获取 A2 单元格的值
alert(A2.Value2);
}
选中多个单元格
- Resize(row,list): row:选中多少行, list:选中多少列
function Macro() {
const sheet = Sheets.Item(1);
// 在 A1 单元格开始, 第1行第3列
sheet.Range("A1").Resize(1, 3).Select();
// 在 B1 单元格开始, 第2行第5列
sheet.Range("B2").Resize(2, 5).Select();
}
function Macro() {
const sheet = Sheets.Item(1);
const A8 = sheet.Range("A8");
let arr = [["demo"], ["逢生博客"], ['QQ'], ['ABC']];
// 从 A8 单元格, 写4行1列, A8 到 A11
A8.Resize(4, 1).Value2 = arr;
// 从 D1 单元格, 写1行4列, D1 到 G1
let arr2 = ["demo", "逢生博客", 'QQ', 'ABC'];
const D1 = sheet.Range("D1");
D1.Resize(1, 4).Value2 = arr2;
}
单元格赋值
function Macro() {
const sheet = Sheets.Item(1);
// 获取 A3 单元格
const A3 = sheet.Range("A3");
// 获取 A3 单元格的值
alert(A3.Value2);
A3.Value2 = 'ABC';
// 获取 A3 单元格的值
alert(A3.Value2);
A3.Value2 = Date();
// 获取 A3 单元格的值
alert(A3.Value2);
}
单元格自动填充
function Macro() {
Range("A1:A3").Select();
Selection.AutoFill(Range("A1:A15"), xlFillDefault);
}
设置单元格字体颜色和背景
function Macro() {
const sheet = Sheets.Item(1);
// 选中 A4 单元格
sheet.Range("A4").Select();
// 设置 A4 单元格字体的颜色
(obj => {
obj.Color = 255;
})(Selection.Font);
// 设置 A4 单元格背景的颜色
(obj => {
obj.Color = 65536;
})(Selection.Interior);
}
设置单元格日期时间格式
function Demo() {
Range("A1").Select();
Selection.Formula = "2025-09-30 12:20:10";
Selection.NumberFormatLocal = "yyyy-mm-dd hh:mm:ss";
}
设置单元格宽高
function Macro() {
Range("C1").Select();
(obj=>{
obj.EntireColumn.Hidden = false;
obj.ColumnWidth = 28;
})(Columns.Item("C:C"));
Rows.Item("1:1").RowHeight = 82;
}
单元格对齐
function Macro() {
Range("A1").Select();
// 水平对齐
Selection.HorizontalAlignment = xlHAlignLeft;
Selection.HorizontalAlignment = xlHAlignCenter;
Selection.HorizontalAlignment = xlHAlignRight;
// 垂直对齐
Selection.VerticalAlignment = xlVAlignTop;
Selection.VerticalAlignment = xlVAlignCenter;
Selection.VerticalAlignment = xlVAlignBottom;
}
设置字体与字号
function Macro() {
Range("A1").Select();
Selection.Font.Name = "仿宋";
Selection.Font.Size = 18;
}
合并单元格操作
function Macro() {
const sheet = Sheets.Item(1);
// 选中 A1 B1 单元格
sheet.Range("A1:B1").Select();
// 合并 A1 B1 单元格
(obj => {
obj.Merge(false);
obj.HorizontalAlignment = xlHAlignCenter;
})(Selection);
}
插入本地图片
function Macro() {
Range("A1").Select();
// 200 是图片宽、100图片高,填 -1 按图片原始大小
ActiveSheet.Shapes.AddPicture("/Users/wufengsheng/Desktop/图片1.png", msoFalse, msoTrue, -1, -1, 200, 100);
}
JSA 条件语句
if 判断
function Macro() {
const sheet = Sheets.Item(1);
const A1 = sheet.Range("A1");
const B1 = sheet.Range("B1");
if(A1.Value2 == 1 || B1.Value2 == 2) {
alert("有1或2");
if(A1.Value2 == B1.Value2) {
alert("A1等于B1");
} else {
alert("A1不等于B1");
}
}else{
alert("没有1和2");
}
}
判断单元格空值
function Macro() {
const wb = Workbooks.Item(1);
// 选择第1个 Sheet
const sheet = wb.Worksheets(1);
const C1 = sheet.Range("C1");
if(C1.Value2 == undefined) {
alert("C1是空值");
} else {
alert("C1是非空值");
}
}
for 循环
function Macro() {
const sheet = Sheets.Item(1);
// 遍历 A1 到 A5 单元格的值
for(let i = 1; i <= 5; i++) {
const cell = sheet.Range("A" + i);
alert(cell.Value2);
}
}
function Macro() {
const sheet = Sheets.Item(1);
// 数组
const arr = ["demo", "逢生博客", "关注不迷路", "123", "abc"]
// 遍历 A1 到 A5 单元格并为单元格赋值
for(let i = 0; i < 5; i++) {
const value = arr[i];
const cell = sheet.Range("A" + (i + 1));
// 赋值单元格
cell.Value2 = arr[i];
alert(cell.Value2);
}
}
switch 语句
function Macro() {
const sheet = Sheets.Item(1);
const A1 = sheet.Range("A1");
switch(A1.Value2) {
case 1:
alert("A" + A1);
break;
case 8:
alert("C" + A1);
break;
default:
alert("none");
}
}
弹出窗体
输入框
function Macro() {
const sheet = Sheets.Item(1);
const A1 = sheet.Range("A1");
const value = InputBox("提示内容", "提示框标题", "输入框的默认值", 200, 200);
alert(value);
A1.Value2 = value;
}
提醒框
function Macro() {
const sheet = Sheets.Item(1);
const A1 = sheet.Range("A1");
// 是=6, 否=7
const value = MsgBox("提示内容", jsYesNo, "提示框标题");
alert(value);
A1.Value2 = value;
}
JSA 类与对象
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
pay() {
return `${this.name}:你好,我今年${this.age}岁`;
}
}
function Macro() {
const person = new Person("WPS", 19);
alert(person.pay());
}
URL 转图片
function Macro() {
const wb = Workbooks.Item(1);
// 选择第1个 Sheet
const sheet = wb.Worksheets(1);
// 图片 URL 地址
const imgUrl = "https://pic3.zhimg.com/50/v2-32a48f1ac39e07336104ad0d6385a920_400x224.jpg";
// 设置 1 到 3 行的高度
Rows("1:3").RowHeight = 50;
// 设置 A 到 B 列的宽度
Columns('A:B').ColumnWidth = 15;
// 设置 C 到 E 列的宽度
Columns('C:D').ColumnWidth = 32;
// 插入图片
let top = 50;
let index = 0;
ActiveSheet.Shapes.AddPicture(imgUrl, true, true, 1, 1 + (top * index), 80, 50);
index = 1;
ActiveSheet.Shapes.AddPicture(imgUrl, true, true, 1, 1 + (top * index), 80, 50);
index = 2;
ActiveSheet.Shapes.AddPicture(imgUrl, true, true, 1, 1 + (top * index), 80, 50);
}

注: 有需要 JSA 宏定制需求,欢迎私信。











