【WPS JSA】当前工作表公式转数值

大家好,我是宽吻鳄。这里是「宽吻鳄画表勒格记」——专注WPS表格硬核技巧,每期干货,让你的工作效率直线飙升!欢迎关注,咱们一起解锁更多高效技能!
实际使用WPS表格时,常常对基础信息进行合并、统计、分析等操作,会设置很多公式,有的是表内公式,有的是表间公式。
设置了表间公式,生成的工作表与源工作表之间通过公式连接着,当两者脱离后,源工作表被重命名或被删除时,会出现取数错误提示,会直接造成生成的工作表数据遗失。
解决的办法之一是将设置表间公式转为数值。可以手工操作即通过复制+选择粘贴数值来实现,如果表间公式较多,手工操作效率低,也易出错;还有就是通过JSA代码来实现,非常便捷。
今天,重点介绍用JSA代码将当前工作表公式转数值。有两种模式:当前工作表公式转数值_仅表间公式、当前工作表公式转数值_所有公式(其中表间公式也有不需要的时候),可根据需求选择不同模式。
请记住一个WPS表格应用原则:凡是涉及批量或重复性操作,JSA(JavaScript for Application)宏代码都能帮你一键完成,秒速搞定!
要想活干得快,漂亮,还不加班,就来学习WPS JSA宏编程!磨刀不误砍柴功,打铁还需自身硬。
来吧,直接上代码。
【WPS JSA】代码:
function 当前工作表公式转数值() {// 弹出选择对话框,让用户选择公式转换数据模式// 按钮类型 3 = vbYesNoCancel(显示"是"、"否"、"取消"三个按钮)var choice = MsgBox("请选择转换模式:\n\n" +"【是】- 仅表间公式转数值(表内公式保留不变)\n" +"【否】- 所有公式转数值(含表内公式全部转为数值)\n\n" +"【取消】- 退出操作",3, // 3 = vbYesNoCancel(是/否/取消)"公式转数值 - 选择模式");// 根据用户选择调用对应的函数if (choice === 6) { // 6 = vbYes(点击"是")// 用户选择"是":调用仅表间公式转数值函数(表内公式保留不变)当前工作表公式转数值_仅表间公式();} else if (choice === 7) { // 7 = vbNo(点击"否")// 用户选择"否":调用所有公式转数值函数(含表内公式全部转为数值)当前工作表公式转数值_所有公式();} else { // 点击"取消"或关闭对话框(返回值为 2 或其他)// 用户取消操作,给出提示并退出MsgBox("已取消操作。", 0, "提示");}}function 当前工作表公式转数值_仅表间公式() {//功能:将当前工作表中所有跨工作表引用的公式(表间公式)转为数值,表内公式(不跨表引用的公式)保留不变。// 注意:此操作不可逆,建议执行前备份文件// 获取当前活动工作表var sht = Application.ActiveSheet;// 获取已使用区域(避免遍历空白单元格,提升效率)var rng = sht.UsedRange;// 获取已使用区域的总行数var rows = rng.Rows.Count;// 获取已使用区域的总列数var cols = rng.Columns.Count;// 计数器:记录转换了多少个表间公式var totalCount = 0;// 第一层循环:遍历每一行for (var i = 1; i <= rows; i++) {// 第二层循环:遍历每一列for (var j = 1; j <= cols; j++) {// 获取当前单元格对象var cell = rng.Item(i, j);// 判断条件:该单元格包含公式 且 公式中包含 "!"(即跨工作表引用)if (cell.HasFormula && cell.Formula.indexOf("!") !== -1) {// 将公式的计算结果赋值为静态数值(公式被覆盖,转为数值)cell.Value2 = cell.Value2;// 转换计数加1totalCount++;}// 若公式不包含 "!",则判定为表内公式,不做任何处理,直接跳过}}// 执行结果反馈if (totalCount === 0) {// 没有发现表间公式时提示MsgBox("当前工作表未发现表间公式。\n(表内公式均已保留。)", 0, "提示");} else {// 完成转换后反馈结果MsgBox("当前工作表 \"" + sht.Name + "\" 已完成转换!\n" +"共转换 " + totalCount + " 个表间公式。\n" +"表内公式均已保留未变。", 0, "操作结果");}}function 当前工作表公式转数值_所有公式() {// 功能:将当前工作表中所有公式(含表内公式和表间公式)全部转为数值// 注意:此操作不可逆,建议执行前备份文件// 获取当前活动工作表var actSheet = Application.ActiveSheet;// 获取已使用区域(避免遍历空白单元格,提升效率)var usedRng = actSheet.UsedRange;// 提前判断是否为空表// 条件:usedRng不存在 或 单元格数量为0 或 仅A1有内容且为空if (!usedRng || usedRng.Count === 0 || usedRng.Address === "$A$1" && actSheet.Range("A1").Value === "") {MsgBox("当前工作表为空,无需转换。", 0, "提示");return; // 退出函数}// 获取已使用区域的总行数var rows = usedRng.Rows.Count;// 获取已使用区域的总列数var cols = usedRng.Columns.Count;// 计数器:记录转换了多少个公式单元格var count = 0;// 第一层循环:遍历每一行for (var i = 1; i <= rows; i++) {// 第二层循环:遍历每一列for (var j = 1; j <= cols; j++) {// 获取当前单元格对象var cell = usedRng.Item(i, j);// 判断该单元格是否包含公式if (cell.HasFormula) {// 将公式的计算结果赋值为静态数值(公式被覆盖,转为数值)cell.Value2 = cell.Value2;// 转换计数加1count++;}}}// 执行结果反馈if (count === 0) {// 未发现公式时提示MsgBox("当前工作表 \"" + actSheet.Name + "\" 中未发现公式。", 0, "提示");} else {// 完成转换后反馈结果MsgBox("当前工作表 \"" + actSheet.Name + "\" 已完成转换!\n共转换 " + count + " 个公式单元格。", 0, "操作结果");}}
基本操作步骤:
1.打开WPS表格文件。按下 Alt + F11(或点击「开发工具」→「WPS宏编辑器」),打开WPS JSA编辑器。
2.按Ctrk+O键(不是零),导入相应js文件,就直接导入了JSA宏代码。
3.回到WPS表格界面,点击「开发工具」→「运行宏」,找到相应宏,点击「运行」即可。

夜雨聆风