应用场景:
目录
要求将excel中的表格插入到word文档中
- 将doc格式转为docx
- 将表格插入文档
- 如有需要可以将docx文档转回doc,方法与1相似
问题描述1
由于python不能直接对doc格式的word进行操作,需要提前将doc文档另存为docx
注:里面的路径和绝对路径如path和newPath均为绝对路径
def docToDocx(path):
word = Dispatch('Word.Application')
# 后台运行不显示
word.Visible = 0
# 不警告
word.DisplayAlerts = 0
doc = word.Documents.Open(FileName=path, Encoding='gbk')
# 必须绝对路径,保持和doc路径一致
newPath = os.path.splitext(path)[0] + '.docx'
# 暂停3秒,否则会报错 -2147352567
time.sleep(3)
doc.SaveAs(newPath, 12, False, "", True, "", False, False, False, False)
# 开启会删除原来的doc文档
# doc.Close()
# 退出
word.Quit()
time.sleep(2)
# print('doc文档已另存为docx文档')
return newPath
问题描述2:
将excel表格插入到word文档指定位置,需要在word指定位置实现编写表名,以便检索
excel中也可能存在多个sheet
# 将excel中的表格存放在word文档指定位置
def xlsxToDoc(docxPath, excelPath):
# 打开excel文件
# data_only=True---避免出现公式,直接给出计算结果
excel = load_workbook(excelPath, data_only=True)
# 打开word文档
word = Document(docxPath)
print('打开文档')
# 遍历excel文件中所有的worksheets
for sheet in excel.worksheets:
rows = list(sheet.rows)
# 遍历word文档的段落,并找到标题
for paragraph in word.paragraphs:
if sheet.title in paragraph.text:
table = word.add_table(rows=len(rows),
cols=len(rows[0]),
style='Table Grid',
)
# 从表单中读取数据,写入word中的表格
for irow, row in enumerate(rows):
for icol, col in enumerate(row):
# print(col.value)
# 判断是因为会出现丢失精度,原因未知
if isinstance(col.value, float):
table.cell(irow, icol).text = str(round(col.value, 2))
elif col.value is None:
table.cell(irow, icol).text = ''
else:
table.cell(irow, icol).text = str(col.value)
# 把添加的table移动到指定的位置
move_table_after(table, paragraph)
# 保存word文件
word.save(docxPath[:-4] + 'docx')
print('已将表格插入到文档当中')
# ---------------------------------------------------------------------------------------# 表默认会添加在文档尾部,需要定义函数将其移动到指定位置
def move_table_after(table, paragraph):
tbl, p = table._tbl, paragraph._p
p.addnext(tbl)
小问题:
若需要在转回doc文档时,删掉docx文档,需在转换方法最后添加代码os.remove(path)
需要引入的包
总结:
if __name__ == '__main__':
# path = input('请输入word文档的绝对路径: ')
# excelPath = input('请输入excel文档的绝对路径: ')
# D:\pythonProject\文档.doc
path = 'D:\pythonProject\文档.doc'
# D:\pythonProject\表格.xlsx
excelPath = 'D:\pythonProject\表格.xlsx'
docxPath = docToDocx(path)
xlsxToDoc(docxPath, excelPath)
docxToDoc(docxPath)