作品展示
背景需求
上次23个班级班主任统计图书,写在EXCEL内
【办公类-19-01】20240108图书统计登记表制作(23个班级)EXCEL复制表格并合并表格-CSDN博客文章浏览阅读693次,点赞12次,收藏7次。【办公类-19-01】20240108图书统计登记表制作(23个班级)EXCEL复制表格并合并表格https://blog.csdn.net/reasonsummer/article/details/135473511提交后
每个班级的图书数量不一致,
需求
1、删除多余的空行
2、在序号和书名中间加入“年级”“班级”
素材准备:
全部代码
''' 把每个EXCEL前面增加一列班级、一列年级。共生成25份 删除多余行 作者:阿夏 时间:2024年1月22日 ''' from openpyxl import Workbook from openpyxl.styles import Alignment from openpyxl.styles import Border, Side import openpyxl from docx import Document import os from docx.enum.text import WD_BREAK# 换页符号 from docx.enum.section import WD_SECTION from docx.shared import Pt,Inches, Cm #导入模块xlrd import xlrd import openpyxl # import pandas as pd import os import time import win32com.client as win32 imagePath=r'C:Usersjg2yXRZOneDrive桌面图书' print('------------第1步:读取原始文件-------------') # 新建一个”装N份word和PDF“的临时文件夹 imagePath1=imagePath+r'\02插入班级年级的班级图书' if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在 os.makedirs(imagePath1) # 若图片文件夹不存在就创建 # 指定要读取的文件夹路径 folder_path = r'C:Usersjg2yXRZOneDrive桌面图书 1班主任提交的图书' # 获取文件夹内所有文件名 file_names = os.listdir(folder_path) # 拼接文件路径 doc_paths = [os.path.join(folder_path, file_name) for file_name in file_names] print(doc_paths) # ['C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大1班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大2班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大3班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大4班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大5班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大6班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\大7班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\小1班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\小2班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\小3班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌 # 面\图书\所有图书\小4班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\小5班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图 # 书\所有图书\小6班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\小7班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所 # 有图书\托1班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\托2班班级图书汇总表.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\测试.xlsx', 'C:\Users\jg2yXRZ\OneDrive\桌面\图书\所有图书\测试2.xlsx'] print('------------第2步:每个EXCEL插入两列班级年级-------------') # 遍历所有的EXCLE,添加班级列和年级列 for x in range(len(doc_paths)): # 读取Excel文件 workbook = openpyxl.load_workbook(r'{}'.format(doc_paths[x])) # 获取第一个工作表 worksheet = workbook.worksheets[0] # 插入两列 grade=['班级','年级'] title=[] # 提取标题=班级 cells=worksheet['A1'] # 大1 title1=cells.value[6:8] # 大班组 title2=cells.value[6:7]+'班组' title.append(title1) title.append(title2) print(title) # 写入两列 班级和年级 for i in range(len(grade)): # 在A列后插入一列B,并填写为"小1班" worksheet.insert_cols(2) # 在第2列前插入一列 worksheet['B2']=grade[i] # 先插入班级,再插年级 # 插入列的宽度 worksheet.column_dimensions['B'].width = 10 worksheet.column_dimensions['C'].width = 10 # 获取行数 row_count = worksheet.max_row # 填写B列的单元格为"小1班" for row in range(3, row_count + 1): alignment = Alignment(horizontal='center') worksheet.cell(row=row, column=2,value=title[i]).alignment = alignment # 获取活动工作表 ws1 = workbook.active # 添加表格框线 假设你要设置的数据范围是第2行到第总行数+1行,第2列到第3列=第2列 for col in ws1.iter_cols(min_row=3, max_row=row_count + 1, min_col=2, max_col=5): # 注意:max_row应该是11,因为你要包括第10行 for cell in col: cell.border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin')) # E列出版社和F列ISBN列宽变长 worksheet.column_dimensions['E'].width = 20 worksheet.column_dimensions['F'].width = 20 # 标签名字改成大1 ,不改就是“Sheet1” worksheet.title=title[0] # 删除“书名、出版社、ISDN”号三列都是空的行数,需要循环删除 # worksheet = workbook.active for row in worksheet.iter_rows(min_row=3, max_row= worksheet.max_row, min_col=4, max_col=6): # 4=D # 因为删除一个空行后,行数上移,可能会跳过某些空行,所以最多循环350次,反复删除空行 for y in range(365): # 生成时间长 # 检查D、E和F列的单元格是否都为空 if all(cell.value is None for cell in row): # 如果都为空,删除整行 worksheet.delete_rows(row[0].row) # 保存修改后的Excel文件 workbook.save(imagePath+r'\02插入班级年级的班级图书新{}'.format(doc_paths[x][-15:])) workbook.close() print('------------第4步:将改过的新图书放在一张表里,保留原始格式-------------') # # 把整理里面的多个EXCEL工作表合并在一个工作表内N个工作簿、 # print('---第3步:把23个工作簿合并1个工作簿的N个工作表-----') # a=r'C:Usersjg2yXRZOneDrive桌面图书各班填写后EXCEL.xlsx' # print(a) # def merge_excel_files(path): # # create a new Excel workbook or open an existing one # excel = win32.gencache.EnsureDispatch('Excel.Application') # try: # wb = excel.Workbooks.Open(os.path.join(path, a)) # except: # wb = excel.Workbooks.Add() # # loop through all Excel files in the folder # for file in os.listdir(path): # print(file) # # 大5班班级图书汇总表.xlsx # if file.endswith('.xlsx'): # open the Excel file打开EXCEL文件 # ww=path+'\'+file # print(ww) # wb_source = excel.Workbooks.Open(os.path.join(path, file)) # print(wb_source) # # loop through all worksheets in the Excel file 所有文件内容 # for sheet in wb_source.Worksheets: # # copy the worksheet to the destination workbook 复制表格内容到目标文件内,将其放到N工作表格后面 # sheet.Copy(After=wb.Sheets(wb.Sheets.Count)) # # close the source workbook 关闭来源文件 # wb_source.Close() # # save and close the destination workbook # wb.SaveAs(os.path.join(path, a)) # wb.Close() # excel.Quit() # # delete Sheet1 from 合并.xlsx # excel = win32.gencache.EnsureDispatch('Excel.Application') # wb = excel.Workbooks.Open(os.path.join(path, a)) # ws = wb.Worksheets('Sheet1') # ws.Delete() # wb.Save() # wb.Close() # excel.Quit() # path = imagePath+r'\02插入班级年级的班级图书' # merge_excel_files(path)
终端演示:
最终成果
还没有研究出来如何将这么多工作表,合并在一张工作表的一个工作簿里,并保留原来的格式。
待续