【问题标题】:Extracting tables from Word into Excel- how to keep the tables separate?将表格从 Word 提取到 Excel - 如何保持表格分开?
【发布时间】:2021-08-22 15:16:49
【问题描述】:

尝试将 .docx 中的表格(在列数和行数方面大小不同)导出到 Excel 中

我可以获取将表格转换为 Excel 的文档,但它将两个表格连接在一起。 有没有办法让表格在同一张纸上或不同的工作表上分开(都可以)?

代码如下:

pip install python-docx
import pandas as pd

from docx import Document
path = (r"PATH\Practice_Tables.docx")

df = pd.DataFrame()

doc = Document(path)
for table in doc.tables:
    for row in table.rows:
        row_text = [c.text for c in row.cells]
        df = df.append([row_text], ignore_index=True)
        
print(df)

                  0                     1               2
0    Table header 1        Table header 2  Table header 3
1              r1c1                  r1c2            r1c3
2              r2c1                  r2c2            r2c3
3  Practice Table 2  Practice table col 2             NaN
4             Row 2                Row 2a             NaN

writer = pd.ExcelWriter('PracticeTables3.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1')

writer.save()

更新

单张错误:

NameError                                 Traceback (most recent call last)
<ipython-input-7-d2e9fa27f104> in <module>
      9     print(df)
     10 
---> 11     df.to_excel(writer, sheet_name='Sheet1', startrow=startrow)
     12     startrow += len(df)+2
     13 

NameError: name 'startrow' is not defined

【问题讨论】:

    标签: python excel pandas xlsx python-docx


    【解决方案1】:

    您当前的代码是将所有表添加到一个数据框中。

    您需要为每个表创建一个单独的数据框,将其写​​入 Excel 文件并继续。

    单独的工作表

    这会将每个表格写入 Excel 文件中的单独工作表。

    import pandas as pd
    from docx import Document
    
    path = 'Practice_Tables.docx'
    
    sheet_no=0
    
    writer = pd.ExcelWriter('PracticeTables3.xlsx', engine='xlsxwriter')
    doc = Document(path)
    for table in doc.tables:
        df = pd.DataFrame()
        for row in table.rows:
            row_text = [c.text for c in row.cells]
            df = df.append([row_text], ignore_index=True)
        
        print(df)
        sheet_no += 1 
        df.to_excel(writer, sheet_name=f'Sheet{sheet_no}')
    
    writer.save()
    

    单张

    此代码会将表格写入同一张表,其间有行。

    import pandas as pd
    from docx import Document
    
    path = 'Practice_Tables.docx'
    
    startrow=0
    
    writer = pd.ExcelWriter('PracticeTables3.xlsx', engine='xlsxwriter')
    doc = Document(path)
    for table in doc.tables:
        df = pd.DataFrame()
        for row in table.rows:
            row_text = [c.text for c in row.cells]
            df = df.append([row_text], ignore_index=True)
        
        print(df)
       
        df.to_excel(writer, sheet_name='Sheet1', startrow=startrow)
        startrow += len(df)+2
        
    writer.save()
    

    【讨论】:

    • 谢谢-这适用于示例数据,但是当我实际使用包含 28 个表格的“真实”文档时,前两个表格正确导出,第三个有一半行,另外 25 个工作表不包含任何数据——只有索引行。有什么建议吗?
    • 多张纸方法-更新了原始文件以显示从单张纸中提取的错误
    • 你有什么改变吗?
    • 不,只是相应的文件名/路径名
    猜你喜欢
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多