上次23个班级班主任统计图书,写在EXCEL内
每个班级的图书数量不一致,
'''
把每个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:\Users\jg2yXRZ\OneDrive\桌面\图书'
print('------------第1步:读取原始文件-------------')
# 新建一个”装N份word和PDF“的临时文件夹
imagePath1=imagePath+r'\\02插入班级年级的班级图书'
if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在
os.makedirs(imagePath1) # 若图片文件夹不存在就创建
# 指定要读取的文件夹路径
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\图书\01班主任提交的图书'
# 获取文件夹内所有文件名
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:\Users\jg2yXRZ\OneDrive\桌面\图书\各班填写后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)
还没有研究出来如何将这么多工作表,合并在一张工作表的一个工作簿里,并保留原来的格式。
待续