背景需求:
之前做了優化過的點名冊
【辦公類-54-07】20250901 2025學年第一學期班級點名冊模版(雙休國定假涂成灰色、修改標題和頁眉,批量導出PDF)-CSDN博客文章瀏覽閱讀984次,點贊27次,收藏29次。【辦公類-54-07】20250901 202學年第一學期班級點名冊模版(雙休國定假涂成灰色、修改標題和頁眉,批量導出PDF)https://blog.csdn.net/reasonsummer/article/details/149070124?spm=1011.2415.3001.5331
但是最后收集的名單Excel與之前的名單Excel有不同,之前是安三個年齡段收集的三個表。名字從第4行開始,直接填寫性別總人數
本次是所有年齡段都寫在一起,名字從第二行開始,有園區、性別
兩個Excel的信息提取位置不同,所以要重新修改代碼
代碼
'''
上學期點名冊批量(灰色)
1、修改原始模版,更改年月、標題、頁眉
2、讀取所有的EXCEL,批量制作EXCEL多月
3、每頁標題包含園區)
3、轉成PDF,便于打印
deepseek、阿夏
20250808
'''
import openpyxl
from openpyxl.styles import PatternFill
from datetime import datetime, timedelta
import win32com.client
import xlwings as xw # 新增導入xlwings
import time, os# 第一部分:生成點名表Excel文件
day = '2025年9月'
title1 = '2025學年第一學期'
# title2 = '上海市閔行區XXXX幼兒園(XXX園區)'
title2 = '上海市閔行區XXX幼兒園'
# names = 'XX'
names = 'XX'def excel_to_pdf(input_file):# 創建PDF輸出路徑pdf_file = os.path.splitext(input_file)[0] + '.pdf'# 使用win32com轉換Excel到PDFexcel = win32com.client.Dispatch("Excel.Application")excel.Visible = Falsetry:# 打開工作簿wb = excel.Workbooks.Open(input_file)# 設置打印屬性for ws in wb.Worksheets:ws.PageSetup.Orientation = 1 # 1=橫向, 2=縱向ws.PageSetup.Zoom = Falsews.PageSetup.FitToPagesTall = 1ws.PageSetup.FitToPagesWide = 1ws.PageSetup.CenterHorizontally = Truews.PageSetup.CenterVertically = Truews.PageSetup.LeftMargin = excel.CentimetersToPoints(1)ws.PageSetup.RightMargin = excel.CentimetersToPoints(1)ws.PageSetup.TopMargin = excel.CentimetersToPoints(1)ws.PageSetup.BottomMargin = excel.CentimetersToPoints(1)ws.PageSetup.HeaderMargin = excel.CentimetersToPoints(0.5)ws.PageSetup.FooterMargin = excel.CentimetersToPoints(0.5)# 導出為PDFwb.ExportAsFixedFormat(0, pdf_file, 1, 0) # 0=PDF格式, 1=整個工作簿print(f"成功轉換為PDF: {pdf_file}")except Exception as e:print(f"轉換失敗: {e}")finally:# 關閉工作簿和應用wb.Close(False)excel.Quit()# 使用xlwings設置頁眉頁腳
def set_header_footer(excel_file, title2):# 啟動Excel應用app = xw.App(visible=False)wb = app.books.open(excel_file)try:# 遍歷所有工作表for sheet in wb.sheets:# 設置居中頁眉sheet.api.PageSetup.CenterHeader = title2# 設置頁腳(可選)# sheet.api.PageSetup.CenterFooter = f'第 &P 頁,共 &N 頁' # 頁碼格式# 保存更改wb.save()except Exception as e:print(f"設置頁眉頁腳失敗: {e}")finally:# 關閉工作簿和應用wb.close()app.quit()path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250902開學點名冊批量制作\00上學期名單'# 打開名單
w