乐于分享
好东西不私藏

【WPS JSA】遍历多簿指定表生成新簿并表重命名

【WPS JSA】遍历多簿指定表生成新簿并表重命名

在实际使用WPS表格时,经常面临将多个工作簿中的同结构工作表,合到一个工作簿中,方便查看、进行页面设置、汇总分析数据、打印等等。如果用手工操作,有人用复制粘贴,有人用工作表移动功能,会很慢很慢,特别是有十几个、几十个、上百个工作簿时,会累得眼睛都花了,也可能崩溃,还不一定能做对。合并多工作簿中的同结构工作表,可使用会员的工作簿合并功能,也很好使,但得花钱;还可以用WPS JSA代码来实现,可秒成。

来吧,上代码看看!

对了,有几点注意事项:

1.要合并的工作簿在放在文件夹中(代码会遍历文件夹中的工作簿)。

2.工作簿应是.xlsx格式文件,如果是.xls文件,要修改一下第13行代码中xlsx为xls。

3.合并后工作簿会保存到同一文件中,并命名为“汇总表”。

WPS JSA】代码:

function 遍历多簿指定表生成新簿并表重命名() {    // 关闭屏幕更新以提高性能,避免闪烁    Application.ScreenUpdating = false;    // 错误捕获,便于调试    try {        const currentWorkbook = Application.ThisWorkbook;        const path = currentWorkbook.Path + Application.PathSeparator; // 跨平台路径分隔符        const currentFileName = currentWorkbook.Name;        // 新建目标工作簿        let newWorkbook = Application.Workbooks.Add();        let file = Dir(path + "*.xlsx"); // 遍历xlsx文件,如果是其他扩展名,修改xlsx为xls        const sheetIndex = 1// 要复制的工作表索引(第2个,索引从0开始)        // 用于记录处理结果        let successCount = 0;        let skipCount = 0;        let errorFiles = [];        while (file !== "") {            // 跳过当前工作簿和临时文件            if (file === currentFileName || file.indexOf("~$") === 0) {                file = Dir();                continue;            }            // 打开工作簿            let workbook = null;            try {                workbook = Application.Workbooks.Open(path + file);            } catch (e) {                // 如果文件损坏或无法打开,记录并跳过                errorFiles.push(file + "(无法打开)");                file = Dir();                continue;            }            // 检查指定索引的工作表是否存在            if (workbook.Sheets.Count < sheetIndex) {                workbook.Close(false);                skipCount++;                file = Dir();                continue;            }            const sheet = workbook.Sheets.Item(sheetIndex);            // 重命名工作表:取原文件名的前6位 + 原工作表名,并限制总长度不超过31字符            let newSheetName = (file.slice(06) + sheet.Name).slice(031);            sheet.Name = newSheetName;            // 将工作表复制到新工作簿的最后            // 参数说明:第一个参数为 Before(此处传 null 表示不指定),第二个参数为 After(指定最后一个工作表之后)            sheet.Copy(null, newWorkbook.Worksheets.Item(newWorkbook.Worksheets.Count));            workbook.Close(false); // 不保存关闭原工作簿            successCount++;            file = Dir();        }        // 保存汇总工作簿到当前文件夹        // 构造保存路径:当前文件夹 + "汇总表.xlsx"        const savePath = path + "汇总表.xlsx";        // 如果已存在同名文件,先删除(避免保存冲突)        try {            if (Dir(savePath) !== "") {                // 使用 Kill 方法删除已存在文件                Kill(savePath);            }        } catch (e) {            // 如果删除失败,跳过(可能是文件被占用)        }        // 保存新工作簿(文件格式为 xlsx)        newWorkbook.SaveAs(savePath, 51); // 51 对应 xlOpenXMLWorkbook(.xlsx)               // 恢复屏幕更新        Application.ScreenUpdating = true;        // 弹出完成提示        let msg = "处理完成!\n";        msg += "成功复制工作表数:" + successCount + "\n";        msg += "跳过的文件数(无指定工作表):" + skipCount + "\n";        if (errorFiles.length > 0) {            msg += "以下文件打开失败:\n" + errorFiles.join("\n");        }        msg += "\n汇总工作簿已保存至:\n" + savePath;        alert(msg);    } catch (e) {        // 捕获全局错误并显示        Application.ScreenUpdating = true;        alert("程序运行出错:\n" + e.message);    }}
往期内容:
【WPS JSA】设置打印页面参数_所有工作表
【WPS JSA】设置打印页面参数_当前工作表
【WPS JSA】提取当前文件夹下文件名目录
什么是WPS JSA?如何调用WPS宏编辑器?
可下载以下资料查看测试:
2026年06月16日-【WPS JSA】遍历多簿指定表生成新簿并表重命名.zip
如果好用,请关注一下,你们的点赞、转发是我不断更新的动力!