首页 > 解决方案 > Python-Docx 将表格导出到 Word 表格

问题描述

我正在尝试使用 python-docx 将具有动态行(数量取决于用户)的表导出到 Microsoft Word 表这是我的 docx 代码:

            doc.add_heading("Findings Summary", level=1)
            table_findings = doc.add_table(rows=0, cols=3)
            hdr_cells = table.rows[0].cells
            hdr_cells[0].text = 'ID'
            hdr_cells[1].text = 'Description'
            hdr_cells[2].text = 'Risk'
            test_id1 = self.InformationOverviewTestIDLineEdit.text()
            for  row_index, row_data in enumerate(c.execute('SELECT Summary_Findings_Name, Summary_Findings_Desc, Summary_Findings_Risk FROM Findings_Summaries WHERE Test_ID=?', [test_id1])):
                row_cells = table_findings.add_row().cells
                row_cells[0].text = (row_data)
                row_cells[1].text = (row_data)
                row_cells[2].text = (row_data)


            doc.add_page_break()

这只是我需要工作的代码的一部分,我让其余的工作完美无缺。那是我的第一次尝试,我认为这样做会更容易。本质上,我想循环数据库以查找 Test_ID 并从包含搜索的 Test_ID 的数据库中提取所有行。这个 Test_ID 将显示在我的 PyQT5 代码的行编辑中。它是我正在努力解决的循环部分。如果我按原样运行该代码,它将返回此错误:

元组索引超出范围

 line 1080, in Extracting_Report
    hdr_cells1[2].text = 'Risk'
IndexError: tuple index out of range

编辑:我设法找到了问题,这是新代码:

            doc.add_heading("Findings Summary", level=1)
        table_findings = doc.add_table(rows=1, cols=3)
        hdr_cells1 = table_findings.rows[0].cells
        hdr_cells1[0].text = 'ID'
        hdr_cells1[1].text = 'Description'
        hdr_cells1[2].text = 'Risk'
        test_id1 = self.InformationOverviewTestIDLineEdit.text()
        for  row_index, row_data in enumerate(c.execute('SELECT Summary_Findings_Name, Summary_Findings_Desc, Summary_Findings_Risk FROM Findings_Summaries WHERE Test_ID=?', [test_id1])):

            row_cells = table_findings.add_row().cells
            row_cells[0].text = (row_data)
            row_cells[1].text = (row_data)
            row_cells[2].text = (row_data)
            print(row_data)

但是,现在它打印 row_data 但不创建文档,它应该考虑如果我删除这个代码块它会创建一个 docx 文档

标签: pythonms-worddocxpython-docx

解决方案


零行表没有单元格。尝试:

table_findings = doc.add_table(rows=1, cols=3)

反而。


推荐阅读