WPS宏实现一个表格拆分成多个表格的功能

把首列名称中一样的分别创建该名称+时间戳的新表格,比如有个表格存储各个省的信息,江苏的有50行数据,山西的55行数据等等,这个就是把江苏的创建一个新表保存,山西的创建一个新表格保存。里面主要是表格的创建与关闭相关知识,还有动态给表格对象赋值,实现循环操作表格的目的。

function JIn521() {

//设置工作表对象

var ws1 = ThisWorkbook.Worksheets('Sheet1');

//Sheet1页首列复制到Sheet2页并去重

var lastRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row;

var sheet1Range1 = ws1.Range(ws1.Cells(1, 1), ws1.Cells(lastRow, 1));

Worksheets.Add();

ActiveSheet.Name = "Sheet2"

var ws2 = ThisWorkbook.Worksheets('Sheet2');

sheet1Range1.Copy(ws2.Cells(1, 1));

ws2.Columns(1).EntireColumn.RemoveDuplicates(1, xlYes);

//D盘下面创建名为test的文件夹

var folderPath = "C:\\test";

while(Dir(folderPath +"\\*.*") != ""){

Kill(folderPath + "\\*.*");

}

if(Dir(folderPath,16)!=""){

RmDir(folderPath);

alert("test文件已存在,已执行删除后重建");

MkDir(folderPath);

}else{

MkDir(folderPath);

}

//遍历Sheet2页值创建其余表格

var st2lastRow = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row;

var workObjects = {};

for(var z = 0; z<st2lastRow-1;z++){

var sheet2Range2ItemValue = ws2.Cells(z+2, 1).Value2;

var newWork = Workbooks.Add();

var date = new Date().toLocaleString();

var date1 = date.split(" ");

var date2 = date1[0].replace(/\//g, ".");

newWork.SaveAs(folderPath+"\\"+sheet2Range2ItemValue+"_"+date2+".xlsx");

workObjects[sheet2Range2ItemValue] = newWork;

//Sheet1页复制到其他表格Sheet1页

var lastCol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column;

var sheet1Range2 = ws1.Range(ws1.Cells(1,1),ws1.Cells(lastRow,lastCol));

sheet1Range2.Copy(workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Cells(1, 1));

//获取其他页数据及地址

var arrow = new Array();

var st5LastRow = workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Cells(workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Rows.Count, 1).End(xlUp).Row;

for(var j = 0 ; j < st5LastRow ; j++){

arrow[j]=j+1;

}

var arrow1 = new Array();

for (let x = 0; x < arrow.length; x++) {

var a = workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Range("A"+arrow[x]).Value2;

var b = workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Range("A"+arrow[x]).Address();

arrow1.push(a+":"+b);

}

//遍历删除各个地市

for(let i = 0;i<arrow1.length;i++){

array = arrow1[i].split(':');

if(array[0] != sheet2Range2ItemValue && array[0]!= "地市"){

workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Range(array[1]).EntireRow.Clear();

}

}

var st5LastRow1 =workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Cells(workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Rows.Count, 1).End(xlUp).Row;

for(let y = st5LastRow1; y>0; y--){

if(Application.WorksheetFunction.CountA(workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Rows(y))==0){

workObjects[sheet2Range2ItemValue].Worksheets("Sheet1").Rows(y).Delete();

}

}

//关闭表格

newWork.Close(true);

}

//删除源表格Sheet2页,设置不弹出是否删除的提示框,执行删除完毕后开启

Application.DisplayAlerts = false;

ws2.Delete();

Application.DisplayAlerts = true;

}

相关推荐
JIngJaneIL13 分钟前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码20 分钟前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_30 分钟前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy1 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌1 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构
sg_knight1 小时前
拥抱未来:ECMAScript Modules (ESM) 深度解析
开发语言·前端·javascript·vue·ecmascript·web·esm
LYFlied1 小时前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
开发者小天1 小时前
react中useEffect的用法,以及订阅模式的原理
前端·react.js·前端框架
前端白袍1 小时前
Vue:如何实现一个具有复制功能的文字按钮?
前端·javascript·vue.js