問題描述
現(xiàn)有一份關(guān)于學生每次實驗報告的匯總Excel表格,要求小東同志把成績登記到對應的Word實驗報告中去褥实,一個班級95份呀狼,一共6次試驗報告,總計480份報告损离。完全依靠手工哥艇,這是何等的毅力。僻澎。貌踏。鑒于此,特地寫了一個簡單的demo以備不時之需窟勃。
樣例
需求:將圖1中的成績登記在圖2的成績記錄框中祖乳,要求字體樣式除顏色為紅色為紅色外均保持一致。
實驗環(huán)境
本文的實驗環(huán)境是 Python 3.6.1 |Anaconda 4.4.0 (64-bit)秉氧,Win10
實驗準備
安裝 python-docx
包
pip install python-docx
注意
安裝的是 python-docx
眷昆,而引入的是 docx
代碼
# -*- coding: utf-8 -*-
# Author:gaozhengjie
# Blog:http://www.reibang.com/u/02877dbc2662
# E-mail:3170601003@cuit.edu.cn
# Python Version:3.6.1
# Time:2018/1/16
# Description:登記成績,從Excel中讀取數(shù)據(jù)存儲到Word的指定位置
import openpyxl
from docx import Document
from docx.shared import RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt
import re
import os
wb = openpyxl.load_workbook("成績表.xlsx") # 打開成績文件
sheet = wb.get_sheet_by_name("Sheet1") # 讀取到指定的Sheet頁
file_list = os.listdir()
file_list2str = "/".join(file_list) # 將list轉(zhuǎn)換為string
for i in range(2, sheet.max_row + 1):
# 遍歷學號汁咏,實驗報告命名方式 "學號_姓名_實驗報告.docx" 或 "學號_姓名_實驗報告"
# python-docx 庫兼容處理 .docx 和 .doc
info = str(sheet['A'+str(i)].value) + '_' + sheet['B'+str(i)].value + '_實驗報告'
filename_regex = re.compile(info + r'.doc(x)?') # x可選
mo = filename_regex.search(file_list2str)
if mo == None:
# 沒有匹配到亚斋,則將該學生的信息單獨打印或保存在一個文本中,便于后續(xù)人工登記
print('*' * 50)
print("出錯信息:未找到該文件 " + info)
print('*' * 50)
else:
filename = mo.group()
document = Document(filename)
table = document.tables[0] # 取Word中的第一個表格
if table.cell(4,0).text == "成績":
table.cell(4,1).text = '' # 清空表格中的內(nèi)容
score = str(sheet['C'+str(i)].value)
run = table.cell(4,1).paragraphs[0].add_run(score) # 添加段落內(nèi)容
table.cell(4,1).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
run.font.color.rgb = RGBColor(0xff, 0x00, 0x00) # 紅色字體
run.font.size = Pt(14) # 字體大小 四號攘滩,14磅
run.font.bold = True # 加粗
document.save(filename) # 保存
else:
print('*' * 50)
print("出錯信息:未找到成績欄 " + info)
print('*' * 50)