date = '${year}年${month}月
;
console.log(date);
sht.Activate();
let max_rows = sht.Range(“B7”).End(xlDown).Row;
let max_cols = sht.Range(“B7”).End(xlToRight).Column;
n = i1?7:8;
rng = sht.Range(sht.Cells(n, 1), sht.Cells(max_rows, max_cols));
rng.Select();
Selection.Copy();
dest.Activate();
dest.Range(A${pos}
).Activate();
dest.Paste();
// 复制第一张工作表的列宽
if(i1) dest.PasteSpecial(xlPasteColumnWidths);
for(k=0;k<max_rows-7;k++) dates.push(date);
pos += max_rows-n+1;
}
Application.ScreenUpdating = true;
dest.Columns(“B:B”).Insert();
dest.Range(“B1”).Value2 = “月份”;
dest.Range(“B2”).Resize(dates.length).Value2 = WorksheetFunction.Transpose(dates);
dest.Columns.Item(“B:B”).ColumnWidth = 20;
dest.Columns.Item(“B:B”).AutoFit();
dest.Range(“A2”).Value2 = “1”;
dest.Range(“A2”).Select();
Selection.AutoFill(dest.Range(A2:A${pos-1}
), xlFillDefault);
dest.Columns(“A:A”).AutoFit();
dest.Rows(1:${pos-1}
).AutoFit();
dest.Name = “总表”;
wb_result.SaveAs(${wb.Path}\\${wb.Name.replace(/\.[^.]+$/,"")}\_合并.xlsx
);
}
结果得到与上述完全一致的结果。
注意:COM组件提供Python的接口Resize方法失效,可以使用GetResize替代。
保留样式拆分表格的Python实现
之前的完整实现方法请查看:
深度剖析Excel表拆分的三项技术
https://xxmdmst.blog.csdn.net/article/details/118655016
今天的实现只考虑将当前工作表拆分到工作簿中的情况,相对之前的代码会有一定简化,同时增加了复制列宽的功能,重新填充编号的功能。完整代码如下:
import win32com.client as win32 # 导入模块
from win32com.client import constants
import os
def simple_split_excel(filename, group_num, title_row=1, excel_app=win32.gencache.EnsureDispatch(‘Excel.Application’)):
“”“作者小小明的csdn:https://blog.csdn.net/as604049322"”"
filename = os.path.abspath(filename)
wb = excel_app.Workbooks.Open(filename)
try:
sheet = wb.ActiveSheet
max_rows = sheet.UsedRange.Rows.Count
max_cols = sheet.UsedRange.Columns.Count
获取总表的数据区域
rng = sheet.Range(sheet.Cells(title_row, 1),
sheet.Cells(max_rows, max_cols))
if title_row > 1:
获取标题行前面的区域
start = sheet.Range(sheet.Cells(
1, 1), sheet.Cells(title_row-1, max_cols))
读取表头名称列表
header = sheet.Range(sheet.Cells(title_row, 1),
sheet.Cells(title_row, max_cols)).Value[0]
如果传入列名则找出列所在的位置
if isinstance(group_num, str):
for i, value in enumerate(header, 1):
if group_num == value:
group_num = i
break
names = sum(sheet.Range(sheet.Cells(title_row+1, group_num),
sheet.Cells(max_rows, group_num)).Value, tuple())
names = set(filter(None, names))
excel_app.ScreenUpdating = False
for name in names:
new_sheet = wb.Sheets.Add(After=wb.Sheets(wb.Sheets.Count))
new_sheet.Name = name
if title_row > 1:
先复制标题行之前的区域
wb.Activate()
sheet.Activate()
start.Copy()
new_sheet.Activate()
new_sheet.Range(“A1”).Activate()
new_sheet.Paste()
sheet.Activate()
rng.AutoFilter(Field=group_num, Criteria1=name)
rng.Copy()
new_sheet.Activate()
new_sheet.Range(f"A{title_row}").Activate()
new_sheet.Paste()
new_sheet.PasteSpecial(constants.xlPasteColumnWidths)
new_sheet.Range(“A2”).Value2 = “1”
new_sheet.Range(“A2”).Select()
max_rows = new_sheet.Range(“A1”).End(constants.xlDown).Row
excel_app.Selection.AutoFill(new_sheet.Range(
f"A2:A{max_rows}"), constants.xlFillDefault)
excel_app.ScreenUpdating = True
sheet.AutoFilterMode = False
wb.Save()
finally:
wb.Close()
调用该代码:
simple_split_excel(“异常项清理明细_合并.xlsx”, “业务系统归属业务员”)
拆分结果如下:
保留样式拆分表格的JS宏实现
完整代码如下:
function excel表拆分() {
console.clear();
let group_num=“业务系统归属业务员”, title_row=1;
var wb=ActiveWorkbook;
var sht = wb.ActiveSheet;
var max_rows = sht.UsedRange.Rows.Count,max_cols = sht.UsedRange.Columns.Count;
// 获取总表的数据区域
rng = sht.Range(sht.Cells(title_row, 1), sht.Cells(max_rows, max_cols));
if(title_row>1){
// 获取标题行前面的区域
start = sht.Range(sht.Cells(1, 1), sht.Cells(title_row-1, max_cols));
}
// 读取表头名称
let header = sht.Range(sht.Cells(title_row, 1), sht.Cells(title_row, max_cols)).Value2[0];
// 如果传入列名则找出列所在的位置
if(typeof(group_num)==“string”){
for(i=0;i<header.length;i++){
if(group_num == header[i]){
group_num=i+1;
break;
}
}
}
Console.log(group_num);
// 获取拆分列去除空值后的所有唯一值
var names=sht.Range(sht.Cells(title_row+1, group_num), sht.Cells(max_rows, group_num)).Value2.flat();
names=Array.from(new Set(names.filter(v=>v!=undefined)));
Application.ScreenUpdating = false;
for(name of names){
new_sheet = Sheets.Add(undefined,wb.Sheets(wb.Sheets.Count));
new_sheet.Name = name;
console.log(name);
if(title_row>1) {
// 先复制标题行之前的区域
sht.Activate();
start.Copy();
new_sheet.Activate();
new_sheet.Range(“A1”).Activate()
new_sheet.Paste();
}
sht.Activate();
rng.AutoFilter(group_num, name);
rng.Copy();
new_sheet.Activate();
new_sheet.Range(A${title\_row}
).Activate();
new_sheet.Paste();
new_sheet.PasteSpecial(xlPasteColumnWidths);
new_sheet.Range(“A2”).Value2 = “1”;
new_sheet.Range(“A2”).Select();
let max_rows = new_sheet.Range(“A1”).End(xlDown).Row
Selection.AutoFill(new_sheet.Range(A2:A${max\_rows}
), xlFillDefault)
}
Application.ScreenUpdating = true;
sht.Activate();
sht.AutoFilterMode = false;
}
点击开发工具->JS宏,运行上述代码后即可得到与Python一样的结果,不过代码未执行保存操作,手动保存即可。
以上就是有关带格式合并与拆分表格的综合案例。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。
因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!
由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频
如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
]
[外链图片转存中…(img-WT5xWYdY-1712530678364)]
既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!
由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频
如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-UvPM14dH-1712530678365)]