【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为xlsconst 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(0, 6) + sheet.Name).slice(0, 31);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);}}

夜雨聆风