【WPS JSA】批量打印不同份数的不同工作表

我们在使用WPS 表格时,有时一个工作簿中会有很多工作表,如召开大型会议或组织大型比赛时,会将用到的各种表格放到一个工作簿中,非常方便查看、修改等。当工作表多了,要打印时,特别是需要打印不同份数时,比如:报到表打印2份、人员信息表打印5份、发放表打印3份、这个表不用打印、那个表打印20份…手动一个个设置打印份数不仅耗时,还容易出错。
你遇到过为打印不同份数的不同工作表而带来烦恼吗?
今天就给大家带来一个超实用的WPS JSA宏,让你轻松实现批量打印不同份数的不同工作表!
总共分三步:
第一步:在工作簿(要打印工作表的)中插入一新工作表(首位)。
第二步:运行“提取工作簿工作表目录GetShtName()”宏,在“功能列”输入份数。
第三步:运行“宏批量打印不同份数工作表()”,就会按照设定的份数自动打印。
温馨提示:
1.操作前,打印机联好通电,装满纸。
2.首次使用的,先用一、两个工作表进行测试。
3.不设置打印份数的,就不会打印。
4.打印前,应先预览检查工作表页面设置是否合理有效。
【WPS JSA】代码:
function 批量打印不同份数工作表() {try {const workbook = Application.ActiveWorkbook; // 获取当前活动工作簿const sheets = workbook.Worksheets; // 获取所有工作表集合const sheet = workbook.ActiveSheet; // 获取当前活动工作表// 获取A列最后一行(从第2行开始查找)const rowCount = sheet.Cells(sheet.Rows.Count, 1).End(-4162).Row;if (rowCount < 2) {MsgBox("没有找到可打印的工作表数据!", 0, "提示");return;}const firstrow = 2, firstcol = 1; // 设置起始单元格 (第2行第1列)const colCount = 2; // 设置结束单位格的列数// 获取数据范围const dataArray = sheet.Range(sheet.Cells(firstrow, firstcol),sheet.Cells(rowCount, colCount)).Value2;// 遍历数据并打印for (let i = 0; i < dataArray.length; i++) {const sheetName = dataArray[i][0];const copies = parseInt(dataArray[i][1]);// 检查数据有效性if (!sheetName || isNaN(copies) || copies <= 0) {console.log(`跳过无效数据: 工作表名=${sheetName}, 份数=${copies}`);continue;}try {const sht = sheets.Item(sheetName);console.log(`正在打印工作表: ${sheetName}, 份数: ${copies}`);sht.PrintOut({Copies: copies,Collate: true});延迟(200);// 添加短暂延迟,避免打印队列冲突//} catch (e) {console.log(`打印工作表 ${sheetName} 失败: ${e.message}`);}}console.log("批量打印完成!");MsgBox("批量打印不同份数工作表已完成!", 0, "提示");} catch (error) {console.log(`发生错误: ${error.message}`);MsgBox(`执行过程中发生错误: ${error.message}`, 0, "错误");}}function 延迟(毫秒) {const start = new Date().getTime();while (new Date().getTime() < start + 毫秒) {// 空循环等待}}
试试使用这个代码,看看是否提高了工作效率,还避免了人工操作的失误。
好用,就收藏起来吧!下次遇到批量打印不同份数的需求,就一宏搞定。
可下载以下WPS表格查看示例:
往期相关内容:
【WPS JSA 】一键提取工作簿中所有工作表名称,如果工作表名称与表格的标题又是一样的,那就一不小心生成了文件目录了。
【WPS JSA】提取工作簿工作表目录并超链接,快捷切换工作表!
【WPS JSA】宏编程:两个字的名字中间批量增加两个空格,一次性完成数据标准化处理,秒成!

持续更新,收藏关注。
学会了WPS JSA实战,就是香!!!
夜雨聆风
