使用python提取word文件表,然后导出到excel

使用python提取word文件表,然后导出到excel,python,Python,我想提取包含在多个工作表中的表格的word文件,然后导出到excel 下面是我的代码 import pandas as pd from docx.api import Document document = Document('word.docx') for table in document.tables: for row in table.rows: data = [] keys = N

我想提取包含在多个工作表中的表格的word文件,然后导出到excel

下面是我的代码

import pandas as pd
from docx.api import Document

document = Document('word.docx')

for table in document.tables:
      for row in table.rows:           
        
            data = []

            keys = None
            for i, row in enumerate(table.rows):
                text = (cell.text for cell in row.cells)
                

                if i == 0:
                    keys = tuple(text)
                    continue
                row_data = dict(zip(keys, text))

            data.append(row_data)
            print(data)
            df = pd.DataFrame(data=data)

#             print (df)

            df.to_excel('dict1.xlsx')

导出时出现问题,我只获取最后一张图纸数据,而不是excel中的完整数据。有谁能帮助我,我犯了什么错误吗?

尝试使用xlsxwriter引擎创建一个书写器,然后将df添加到书写器的新图纸,并在最后保存,而不是覆盖同一个excel文件。看看这是否有效:

import pandas as pd
import xlsxwriter

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

from docx.api import Document

document = Document('word.docx')

sheet_number=1

for table in document.tables:
    for row in table.rows:           
    
        data = []

        keys = None
        for i, row in enumerate(table.rows):
            text = (cell.text for cell in row.cells)
            

            if i == 0:
                keys = tuple(text)
                continue
            row_data = dict(zip(keys, text))

        data.append(row_data)
        print(data)
        df = pd.DataFrame(data=data)
        
        df.to_excel(writer, sheet_name='sheet{}'.format(sheet_number))
        sheet_number+=1

writer.save()
[编辑] 要创建一张包含所有表的图纸,请在为创建数据之前创建数据:

data = []
for table in document.tables:
  for row in table.rows:           
        keys = None
        for i, row in enumerate(table.rows):
            text = (cell.text for cell in row.cells)
            

            if i == 0:
                keys = tuple(text)
                continue
            row_data = dict(zip(keys, text))

        data.append(row_data)
        print(data)
df = pd.DataFrame(data=data)
df.to_excel(writer, sheet_name='sheet{}'.format(sheet_number))

我认为,您正在用每个循环覆盖df数据

import pandas as pd
from docx.api import Document

document = Document('word.docx')

for table in document.tables:
      for row in table.rows:           
        
            data = []

            keys = None
            for i, row in enumerate(table.rows):
                text = (cell.text for cell in row.cells)
                

                if i == 0:
                    keys = tuple(text)
                    continue
                row_data = dict(zip(keys, text))

            data.append(row_data)
            print(data)
            df = pd.DataFrame(data=data)

#Append or combine your df elements here, it is overwriting each time you move to a new table
            result=df.append(df)


        result.to_excel('dict1.xlsx')

为什么在标题中大喊大叫?修改了它。你能帮我回答我的问题吗?你能确定问题是否出在如何从Word中读取数据上吗?如果这是一个问题,结束的事情,我们需要一个样本文件,复制它。如果不是,那么将代码简化到不需要Word文档(除了您之外没有人需要)就可以重现问题并测试修复的地方会很有帮助;例如只需为
文档
硬编码一个Python数据结构,该数据结构具有相同的
对象/结构。你能给我提供word文档示例吗?我已经添加了图像。word文档包含类似的表,直到第10页。你能帮我查找并帮助我吗?但我面临的问题是它只导出word文件的最后一张表。它留下的其余表。而且我不希望在不同的表中输出…在一张表中完整的数据啊,好的,所以你必须在第一张for之前创建数据,df在forI编辑我的答案之前添加一个新的解决方案。请检查它是否解决了您的问题。它没有创建excel文件。请检查导出功能为什么不工作。对不起,您不需要wirter,您只能使用df.to_excel('dict1.xlsx'),或者您可以通过添加writer.save()像现在一样使用它在最后创建文件谢谢,但我得到缩进错误…你能帮我检查你的间距,这就是错误试图告诉你的。