【WPS应用案例】按照内容拆分工作表,免费实现会员功能
创作者俱乐部成员
【案例】以下是一张人员信息表,现在我们需要按照D列的村名将数据拆分为独立工作簿。
相当于下面这个会员功能:
现在我们用JS宏来免费实现这个功能,并且解决会员不能拆分多行标题的问题。
【操作效果】具体操作效果如下:
【代码】具体代码如下,可按ALT+F11打开WPS宏编辑器,复制下面的代码粘贴到编辑器中。
function 按内容拆分数据(){
Application.DisplayAlerts=false; //关闭提醒,防止拆分过程被打断
obj={}; //定义一个字典对象obj,用于存放文件标题
p=ThisWorkbook.Path + '/拆分/'; //拆分文件夹
th=ThisWorkbook.ActiveSheet;
t = parseInt(InputBox("请输入标题行数","标题行数",3)); //标题行数,接受用户输入
col=InputBox("请输入拆分列名","拆分列名",'d'); //拆分列名,接受用户输入
c = th.Range(col+'1').Column; //获取拆分列号
rn=th.Range('a'+Rows.Count).End(xlUp).Row; //最后一行数据行号
tg=Rows("1:"+t); //将标题区域写入单元格对象tg
ar=th.Range(col+(t+1)+':'+col+rn).Value2; //将关键列写入数组ar
ar.forEach(v=>obj[v]=v); //将拆分列写入字典对象obj,目的是去重
for(k of Object.keys(obj)){
let nw = Workbooks.Add(); //新建工作簿
let sh = nw.Sheets.Item(1); //新工作簿的第一张工作表
tg.Copy(sh.Range('a1'));
th.Range('a'+t).AutoFilter(c,k); //筛选数据
th.Range('a'+t).CurrentRegion.Offset(1,0).Copy(
sh.Range('a'+(t+1))); //复制筛选后的数据
nw.SaveAs(p + k + ".xlsx"); //保存表格
nw.Close(); //关闭表格
}
th.Range('a1').AutoFilter(); //取消筛选
Application.DisplayAlerts=true; //开启提醒
alert("拆分完成!"); //提示拆分完成
}
【素材下载】点击下方链接,下载文件本地文件夹,并在文件夹中新建一个名为“拆分”的文件夹。
https://kdocs.cn/l/cbyBlL3hoiCk