批量合并工作簿的终极解决方案 - 使用JS宏轻松实现 点击使用AI助手 了解更多
发布于 2024-11-17 liusiyang 55 编辑
今天这个案例是批量操作的终极应用,学会这个案例,今后的任何批量操作,你都可以为所欲为。
【案例】现在文件夹中有很多个工作簿,我们需要将每个工作簿的活动工作表数据合并到一起。
相当于下面这个会员功能:
现在我们用JS宏来免费实现这个功能。
【操作效果】具体操作效果如下:
【代码】具体代码如下,可按ALT+F11打开WPS宏编辑器,复制下面的代码粘贴到编辑器中。
function 合并工作簿() {
let data = [] //定义名为data的数组,用于存放合并后的数据
let fd = Application.FileDialog(msoFileDialogFilePicker) //打开文件选择器
fd.Filters.Clear() //清除文件选择器内容
fd.Filters.Add('Excel文件', '*.xls;*.xlsx;*.xlsm') //显示EXCEL文件
fd.Title = '请选文件' //设置文件选择器标题
if (fd.Show() != -1) { //如果不选择任何文件
alert('你没选中文件!') //弹出提示
return; //结束退出函数
}
t = parseInt(InputBox("请输入标题行数","标题行数",1)); //标题行数,接受用户输入
for (let i = 0; i < fd.SelectedItems.Count; i++) { //遍历文件
let f=fd.SelectedItems.Item(i + 1) //将文件名赋值给变量f
let wb = Workbooks.Open(f) //打开工作簿,赋值给对象wb
let sh = wb.ActiveSheet //将活动工作表赋值给对象sh
let ar = sh.Range('A1').CurrentRegion.Value2 //将活动工作表数据写入数组ar
ar=ar.map((col)=>['['+f+']'+sh.Name,...col]) //第一列添加工作簿和工作表名
wb.Close(false) //关闭工作簿(不保存)
if(i > 0) ar.splice(0,t) //去掉标题行
data = data.concat(ar) //合并数组
}
data[0][0]='工作簿工作表名' //在第一列首行写入标题
Workbooks.Add() //新建工作簿
let rg=ActiveSheet.Range('a1')
rg.Resize(data.length,data[0].length).Value2=data //将合并合并后的数据写入新工作簿活动工作表
}
【素材下载】点击下方链接,下载文件本地文件夹,在本地文件夹中打开,点击“批量合并工作簿”按钮,即可使用合并功能。
https://kdocs.cn/l/crHXJZE0v0qr
原文链接:https://bbs.wps.cn/topic/9428