【问题标题】:Write tables from Word (.docx) to Excel (.xlsx) using xlsxwriter使用 xlsxwriter 将表格从 Word (.docx) 写入 Excel (.xlsx)
【发布时间】:2020-05-29 14:05:28
【问题描述】:

我正在尝试为表格解析一个单词 (.docx),然后使用 xlsxwriter 将这些表格复制到 excel 中。 这是我的代码:

from docx.api import Document
import xlsxwriter

document = Document('/Users/xxx/Documents/xxx/Clauses Sample - Copy v1 - for merge.docx')
tables = document.tables

wb = xlsxwriter.Workbook('C:/Users/xxx/Documents/xxx/test clause retrieval.xlsx')
Sheet1 = wb.add_worksheet("Compliance")
index_row = 0

print(len(tables))

for table in document.tables:
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)
    #big_data.append(data)
    Sheet1.write(index_row,0, str(row_data))      
    index_row = index_row + 1

print(row_data)

wb.close()

这是我想要的输出:

但是,这是我的实际输出:

我知道我当前的输出会生成一个字符串列表。

无论如何,我可以使用 xlsxwriter 获得我想要的输出吗?非常感谢任何帮助

【问题讨论】:

  • 当然可以。不要将一行中的所有内容都写入单个单元格 (Sheet1.write(index_row,0, str(big_data)))
  • @SiHa 嗨,谢谢您的评论!我尝试替换您的代码行,但它仍然产生相同的输出
  • 嗯,是的,我的代码就是你的代码。我突出显示了问题所在的行,您将一行中的所有值写入列索引为 0 的单元格。您需要更改代码,以便使用每个 row_data 项目增加此值
  • @SiHa 嗯...我明白你的意思,但是当我运行修改后的代码时,我仍然无法获得我想要的输出。请看我编辑的帖子!

标签: python python-3.x xlsxwriter python-docx


【解决方案1】:

我会使用pandas 包,而不是xlsxwriter,如下:

from docx.api import Document
import pandas as pd

document = Document("D:/tmp/test.docx")
tables = document.tables
df = pd.DataFrame()

for table in document.tables:
    for row in table.rows:
        text = [cell.text for cell in row.cells]
        df = df.append([text], ignore_index=True)

df.columns = ["Column1", "Column2"]    
df.to_excel("D:/tmp/test.xlsx")
print df

其中输出插入到 excel 中的以下内容:

>>> 
  Column1 Column2
0   Hello    TEST
1     Est    Ting
2      Gg      ff

【讨论】:

  • 嗨塞德里克!谢谢您的帮助! :) 我也想出了如何使用 xlsxwriter 来做到这一点!我会发布我的答案
【解决方案2】:

这是我的代码更新的一部分,它允许我获得我想要的输出:

for row in block.rows:
        for x, cell in enumerate(row.cells):
            print(cell.text)
            Sheet1.write(index_row, x, cell.text)
        index_row += 1

输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 2017-02-05
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2015-12-23
    相关资源
    最近更新 更多