wps发布JS宏编辑器的功能已经很久了,今天尝试写了个非常简单的Excel表格合并的工具,发现真的是吊打VBA语言!就是有个小小的缺点:不支持外接程序和ActiveX控件,有点可惜,不过终于可以摆脱VBA傻傻的数组、和字典操作了。

核心功能可以通过选择需要的表格来进行合并,并将数据写入到一个新建的工作簿中,可以指定合并后的文件名称,先看动画效果:

实现思路:

  1. 通过FileDialog对象调用文件选择对话框选择文件,获取选中文件的完整路径

  1. 遍历文件路径,利用Workbooks.Open方法打开每一个Excel文件

  1. 然后用Range.CurrentRegion方法把有数据的区域转化为js可操作的数组

  1. 将合并的数据写入到新建的Excel文件中

步骤

一、在wps新建一个Excel文件,切换到开发工具,点击切换到JS环境,然后创建两个按钮,在设计模式下双击创建好的按钮,wps宏编辑器即可生成对应按钮的点击事件处理函数

二、代码其实非常简单,会js都没问题,看注释应该就能理解,这里就直接上代码

源码下载(不需要积分):https://download.csdn.net/download/huaermeier/87415538

//按钮1点击事件处理函数
function CommandButton1_Click() {let fd = Application.FileDialog(msoFileDialogFilePicker) //创建文件对话框对象, mysht = ThisWorkbook.ActiveSheet //绑定第一张工作表对象, arr = []fd.Filters.Clear() //清空文件对话框的文件过滤规则fd.Filters.Add('Excel文件', '*.xls;*.xlsx;*.csv') //添加xls、xlsx、csv文件过滤规则fd.Title = '请选文件'/*利用Show方法显示对话框,如果用户选择了文件,返回值等于-1这里的if条件是:如果用户取消,则清空B3单元格并提示信息,然后return 结束函数运行*/if (fd.Show() != -1) {mysht.Range('B3').Value2 = ''return alert('你没选中文件!')}//遍历每一项选中的文件,将文件路径写入数组arr变量for (let i = 0; i < fd.SelectedItems.Count; i++) {arr[i] = fd.SelectedItems.Item(i + 1)}//将文件路径赋值到B3单元格,用换行符\n 拼接每个数组元素,Value2表示二维数组取值,你可以把表格当做一个二维数组理解mysht.Range('B3').Value2 = arr.join('\n')
}//按钮2点击事件处理函数
function CommandButton2_Click() {let mysht = ThisWorkbook.ActiveSheet, pth = mysht.Range('B3').Value2.split('\n') //获取刚才赋值到B3单元格的文件路径,用js本身的split方法分割成数组, data = [] //每个工作簿的数据写入到数组里//循环打开工作簿,这里用Range.CurrentRegion方法获取以空行与空列的组合为边界的区域,然后将数据写入到arr数组变量for (let i = 0; i < pth.length; i++) {let wb = Workbooks.Open(pth[i]), sht = wb.ActiveSheet, arr = sht.Range('A1').CurrentRegion.Value2wb.Close() //关闭工作簿if (i > 0) arr.shift() //因为只要保留1行表头,其他都要去掉表头才行,所以循环到第二个工作簿开始就要去掉表头data = data.concat(arr) //合并数组}//新建一个工作簿let wb = Workbooks.Add(), wbsht = wb.ActiveSheet, fileName = ''//如果B2单元格指定了文件名就用,如果没有指定就自动生成一个日期格式的文件名//ThisWorkbook.Path表示当前代码工作簿的路径if (mysht.Range('B2').Value2) {fileName = ThisWorkbook.Path + '\\' + mysht.Range('B2').Value2 + '.xlsx'} else {fileName = ThisWorkbook.Path + '\\newFile' + dateFormat('yyyymmddHHMMSS', new Date) + '.xlsx'}//把合并的数据全部写入到刚刚新建的工作簿里wbsht.Range('A1').Resize(data.length, data[0].length).Value2 = datawb.SaveAs(fileName) //保存文件
}//上网找的js通用的时间格式化函数:yyyy-mm-dd HH:MM:SS
function dateFormat(fmt, date) {let retconst opt = {'y+': date.getFullYear().toString(),        // 年'm+': (date.getMonth() + 1).toString(),     // 月'd+': date.getDate().toString(),            // 日'H+': date.getHours().toString(),           // 时'M+': date.getMinutes().toString(),         // 分'S+': date.getSeconds().toString()          // 秒// 有其他格式化字符需求可以继续添加,必须转化成字符串}for (let k in opt) {ret = new RegExp('(' + k + ')').exec(fmt)if (ret) {fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))}}return fmt
}

wps js宏写一个可以批量合并Excel文件表格数据的工具相关推荐

  1. 如何批量合并Excel文件和工作表 - Excel合并器使用教程

    Excel是人们用于创建日常工作表和统计信息的最流行的工具,在我们工作中经常接触到Excel的XLSX和XLS格式文件.不少朋友应该有时会发现,管理太多的Excel工作表和文件是一件头疼的事情,经常需 ...

  2. excel处置4000行数据卡_【R语言】5行代码批量合并Excel文件,并增加文件来源列...

    看到一篇文章, 裴帅帅:Python使用9行代码批量合并Excel文件​zhuanlan.zhihu.com 咱们R语言也不能落后啊,5行代码批量合并Excel文件,再多做一步:增加文件来源列. 说是 ...

  3. python批量合并excel文件,后缀名为xls

    最近处理的一个项目需要用到批量合并excel表格,我就用python拼了一个代码,可以实现传入一个根目录,然后将该目录下所有的后缀名为xls的excel表格进行合并,将结果输出在根目录下 第三方库配置 ...

  4. wps js宏实战案例:批量汇总订单数据、识别黑名单、自动统计业绩、每笔订单生成带条形码的发货单并输出为pdf文件用于打印

    wps js支持ES6语法,对比vba能节省非常多的代码量,不过缺点也很明显,wps js环境暂时不支持调用win系统组件和第三方控件.小声比比:可能有调用的方法,只是我没发现. 基本需求: 可以选择 ...

  5. 【R语言】批量合并Excel文件,并增加文件来源列

    基本步骤: 获取各个文件的完整路径 批量读取+按行合并+增加数据来源列 R语言代码: library(purrr) library(readxl)files = list.files("da ...

  6. 批量合并excel文件

    代码

  7. vb怎样同时打开2个excel工作簿_【赠书】不打开工作簿也能批量合并不同文件夹下多个表格的数据...

    最近推送的五篇文章: <偷懒的技术:打造财务Excel达人>到底有多畅销? <偷懒的技术2>推荐序:未来已来,你准备好了吗? 将"偷懒"进行到底,还在到处找 ...

  8. 自动化办公:教你如何快速合并Excel文件

    大家好,今天更新一篇关与自动化办公的文章. 我们在日常办公中经常会处理各种表格,进行问卷调查等.这些表格可以是我们做好的模板,可以是实践调研,我们需要对填写的表格进行汇总总结,同时需要将反馈回来的附件 ...

  9. wps js宏开发表格数据归类拆分和excel文件合并的xlam加载宏插件

    前言 用wps js宏编辑器开发的表格数据拆分与合并的加载宏工具,写好代码把工作簿另存为xlam加载宏文件,然后添加到加载项即可使用.xlam文件你可以理解为没有工作表的工作簿,先看动画演示效果: 主 ...

最新文章

  1. 无效0_一场时代的变革,一场与时间的较量,“0”无效载体、“0”空气氧化、“0”细菌生存。...
  2. flex项目,file not found错误解决
  3. OpenGL环境多维数据集映射
  4. postman模拟HTTP请求
  5. 《阿里巴巴数据中台实践》深入理解
  6. APR 以及linux安装apr 库目的
  7. webview部分安卓机中文乱码
  8. 基于uniapp开发的适用于微信小程序,头条小程序
  9. linux查看目录分区格式,Linux下查看分区的文件系统类型
  10. sim卡没坏但苹果手机无服务_iPhone手机无服务那些事儿
  11. 位图字体的制作与使用
  12. 抖音下载小助手GUI版
  13. android点击图片进入幻灯片,Android实现幻灯片式图片浏览器
  14. asp.net配置web.config发电子邮件详解
  15. 【独家分享】QQ常见网络骗术***战
  16. html标签-meta
  17. Kubernetes部署
  18. MySQL日期和时间函数 整理
  19. Unity 手机触屏事件
  20. 初识马尔可夫和马尔可夫链

热门文章

  1. 形容词的比较级和最高级
  2. 解决win10文件夹无法解密的问题。
  3. Ajax中XMLHttpRequest对象的详细解析
  4. 65位高校教师接龙晒工资,给打算入高校的博士们参考!
  5. wordpress排版插件_16个最佳WordPress排版插件,可改善您的设计
  6. 计算机在线使用幻映片,几个计算机大一考试的选择题大家帮帮忙```
  7. 传奇服务器设置验证码,如何设置传奇验证码功能
  8. R语言使用epiDisplay包的summ函数计算dataframe中指定变量在不同分组变量下的描述性统计汇总信息并可视化有序点图、自定义cex.main参数配置标题文本字体的大小
  9. java为用户分组_用户分组权限管理模块的设计
  10. vue表单验证(用户名、密码、身份证号、中文姓名、手机号、邮箱)