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
# 将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)
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)
#代码运行后,表格在文章最末尾,且连在一起,请问如何分别粘贴到指定位置?