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

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

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

实现思路:

  1. 通过Application.GetOpenFilename方法获取选中文件的完整路径

  2. js数组迭代遍历文件路径,利用Workbooks.Open方法打开每一个Excel文件

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

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

步骤

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

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

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


function CommandButton1_Click() {
    //文件筛选条件, 标题, 可选多个文件
    let file = Application.GetOpenFilename({
        FileFilter: 'Excel File(*.xls;*.xlsx;*.csv), *.xls;*.xlsx;*.csv',
        Title: '请选择文件',
        MultiSelect: true
    })

    //js三元表达式
    Range('B3').Value2 = file ? file.join('\n') : ''
    if (!file) MsgBox('你没选中文件!')

}

function CommandButton2_Click() {
    let file = Range('B3').Value2.split('\n')
    let data = []

    file.forEach((path, i) => {
        let wb = Workbooks.Open(path, 0)
        let arr = wb.ActiveSheet.Range('A1').CurrentRegion.Value2
        wb.Close() //关闭工作簿

        //因为只要保留1行表头,其他都要去掉表头才行,所以循环到第二个工作簿开始就要去掉表头
        if (i > 0) arr.shift();
        data.push(...arr) //合并数组
    })

    let wb = Workbooks.Add() //新建工作簿
    let path = ThisWorkbook.Path //读取当前文件路径

    //js短路求值, js字符串模板
    let filename = ThisWorkbook.ActiveSheet.Range('B2').Value2 || `newfile-${Date.now()}`

    //把合并的数据全部写入到刚刚新建的工作簿里
    wb.ActiveSheet.Range('A1').Resize(data.length, data[0].length).Value2 = data
    wb.SaveAs(`${path}/${filename}`) //保存文件

}
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Excel效率人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值