本文通过一个连锁门店每天营业额按门店名称进行拆分的案例,讲述wps js宏编辑器中工作簿、工作表和Range的相关操作,比如:工作表的复制,工作簿另存&关闭,Range.findNext使用注意实现等,案例已上传到gitee,文章最后有案例下载地址。
1、案例说明
1)“汇总”Sheet,各分店的日销售额
2)“缴款单模板”Sheet,门店缴款单模板
每个店铺产生一个新的excel文件,收银员收银信息逐条写入
2、基本思路
- 遍历“汇总”Sheet工作表,对分店名称进行去重,得到所有分店名称的数组
- 遍历分店名称数组,创建新的工作簿,工作簿名称为分店名称
-
- 遍历汇总表,查找分店名称都是“数组”中的分店名称时,将该分店的收银员姓名、编号、现金等写入新建的工作簿
- 保存并关闭工作簿
接下来看下代码如何实现。
3、代码实现
function splitShop() {
let cwb = ActiveWorkbook;
let path = cwb.Path;
let sheet1 = Application.Worksheets.Item("汇总"), sheet2 = Application.Worksheets.Item("缴款单模板");
let rValues = sheet1.Range(sheet1.Range("C2"), sheet1.Range("C2").End(xlDown)).Value2;
let columns = sheet1.Columns("C");
let shopNames = [];
for (v of rValues) {
let [shopName] = v;
if (! shopNames.includes(shopName)) shopNames.push(shopName);
}
for (shopName of shopNames) {
sheet2.Copy();
let wb = ActiveWorkbook, sheet = wb.Worksheets.Item(1);
// 设置所属门店
sheet.Range("J3").Value2 = shopName;
let f = columns.Find(shopName);
if (f != null) {
// 设置门店编码,文本
sheet.Range("O3").NumberFormat = "@";
sheet.Range("O3").Value2 = f.Offset(0, -1).Value2;
// 设置日期,yyyy/m/d h:mm
sheet.Range("J4").NumberFormat = "yyyy/m/d h:mm";
sheet.Range("J4").Value2 = f.Offset(0, 1).Value2;
// 设置行索引,从6行开始写数据
let rowIndex = 6;
let firstAddress = f.Address();
do {
sheet.Range("I" + rowIndex).Value2 = f.Offset(0, 2).Value2;
sheet.Range("J" + rowIndex).Value2 = f.Offset(0, 3).Value2;
sheet.Range("K" + rowIndex).Value2 = f.Offset(0, 4).Value2;
sheet.Range("L" + rowIndex).Value2 = f.Offset(0, 5).Value2;
sheet.Range("M" + rowIndex).Value2 = f.Offset(0, 6).Value2;
sheet.Range("N" + rowIndex).Value2 = f.Offset(0, 7).Value2;
sheet.Range("O" + rowIndex).Value2 = f.Offset(0, 8).Value2;
sheet.Range("P" + rowIndex).Value2 = f.Offset(0, 9).Value2;
f = columns.FindNext(f);
rowIndex++;
} while (f != null && f.Address() != firstAddress)
}
wb.SaveAs(path + "\\" + shopName + ".xlsx");
wb.Close(true);
}
}
代码说明:
- sheet2.Copy(),没有任何参数时,会产生一个新的工作簿,并设置为当前工作簿;
- f = columns.FindNext(f),当找到最后一个时会跳到第一个去,因此不进行是否第一个判断时,会死循环,一直查找下去,务必注意;
- b.SaveAs(path + “\” + shopName + “.xlsx”),地址\转义处理
案例下载地址:案例3_工作簿操作_门店处理.xlsm