maymary8213 2023-06-13 21:53 采纳率: 0%
浏览 8

Python编程把Excel表格插入Word指定位置,但不仅无法插入指定位置,表格还连在一起。


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)



#代码运行后,表格在文章最末尾,且连在一起,请问如何分别粘贴到指定位置?
  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 创建了问题 6月13日

悬赏问题

  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 使用Ant Design Pro vue的时候,使用环境变量的时候,构建报错是什么原因