python實現批次生成會議臺卡(pyQt5)

龙岩龙發表於2024-09-19

`# 匯入所需庫
from pptx import Presentation
from pptx.enum.text import PP_ALIGN
from pptx.util import Pt
import pandas as pd # 新增匯入pandas庫
from PyQt5 import QtWidgets # 新增匯入PyQt5庫

建立應用程式

app = QtWidgets.QApplication([])

輸入數字

num_copies = 1 # 直接設定為1,去掉輸入對話方塊

讀取模板PPT和Excel檔案

template_ppt = Presentation(QtWidgets.QFileDialog.getOpenFileName(None, "選擇模板PPT", "", "PPTX Files (.pptx)")[0]) # 選擇模板PPT
excel_file = QtWidgets.QFileDialog.getOpenFileName(None, "選擇Excel檔案", "", "Excel Files (
.xlsx)")[0] # 選擇Excel檔案
excel_data = pd.read_excel(excel_file) # 讀取Excel檔案

複製第一頁

first_slide = template_ppt.slides[0]
num_rows = len(excel_data) # 獲取Excel資料的行數
for i in range(min(int(num_copies), num_rows)): # 確保不超過行數
# 建立新幻燈片並複製內容
new_slide = template_ppt.slides.add_slide(first_slide.slide_layout)
for shape in first_slide.shapes:
if shape.has_text_frame:
new_shape = new_slide.shapes.add_textbox(shape.left, shape.top, shape.width, shape.height)
new_shape.text = str(excel_data.iloc[i, 0]) # 使用Excel中每個單元格的文字

        # 設定文字框文字居中,字型為微軟雅黑,大小為120
        text_frame = new_shape.text_frame
        for paragraph in text_frame.paragraphs:
            paragraph.alignment = PP_ALIGN.CENTER  # 文字居中
        for run in text_frame.paragraphs[0].runs:
            run.font.name = '微軟雅黑'  # 設定字型
            run.font.size = Pt(120)  # 設定字型大小
            run.font.bold = True  # 設定字型加粗

# {{ edit_1 }} 旋轉第一個文字框180度
if new_slide.shapes:  # 確保新幻燈片有形狀
    new_slide.shapes[1].rotation = 180  # 旋轉第一個文字框180度

儲存新的PPT

output_file, _ = QtWidgets.QFileDialog.getSaveFileName(None, "另存為", "output.pptx", "PPTX Files (*.pptx)") # 選擇儲存路徑
if output_file: # 確保使用者選擇了檔名
template_ppt.save(output_file) # 儲存為使用者指定的檔名
`

相關文章