python - 用python在Excel中提取Word表格
问题描述
我有一个带有很多表格的 Word,我想将表格从 Word 提取到 Excel,但每个表格在不同的工作表中。在表格之间,我有很多段落,但我只想要表格。我在网上找到了一些东西,但它不起作用。
from docx.api import Document
import os. path
import pandas as pd
path=('SF.docx')
document=Document(path)
output_path=('Output')
writer=pd.ExcelWriter('{}/docx_tables.xlsx'.format(output_path),engine='xlsxwriter')
for i in range(len(document.tables)):
table=document.tables[i]
data=[]
keys=None
row_data=None
for j,row in(table.rows):
text=(cell.text for cell in row.cells)
if j == 0:
keys=tuple(text)
continue
row_data = dict(zip(keys,text))
data.append(row_data)
df=pd.DataFrame(data)
df.to_excel(writer,sheet_name='N{}'.format(i))
writer.save()
在上面的代码中,'path' 是 docx 文件路径,'output_path' 是保存 excel 文件的文件夹的路径。
错误是这样的:
for j,row in(table.rows): TypeError: cannot unpack non-iterable _Row object
对于每张纸中的每张桌子,如果可能的话,我需要在它们的右边复制 2 次。
如果您有另一种方法可以将所有表格从 word 中提取到不同工作表中的 excel 中,请写出来。
谢谢
解决方案
table.rows
返回一个迭代器_Row
,每次迭代都会产生一个对象。当你写
for j,row in(table.rows):
Python 期望有一个 2 元素序列,因此它可以将第一个元素分配给 ;j
将第二个元素分配给row
; 你可能想做
for j,row in enumerate(table.rows):
推荐阅读
- javascript - 如何删除特定子节点
- android-studio - 我是否将 oncreate 方法或 render 方法中的事件侦听器添加到 libgdx 中的演员?
- python - 将 BeautifulSoup 输出的字符与声明的字符进行比较时出错
- c++ - 确保一个类不继承自两个接口
- python - 获取输出文本作为python中的链接
- python - 将 int 值更改为 .00 格式
- typescript - 如何在 NestJS 中正确设置配置?
- python-3.x - 如何使用 pip 正确安装twisted?
- c++ - 对全局静态函数的未定义引用
- laravel - Laravel 多对多关系,不需要的限制为 250