通过 pywin32 将 pandas 数据帧写入 word 文档 table
Writing a pandas dataframe to a word document table via pywin32
我目前正在编写一个脚本,该脚本需要写入 .docx 文件以供演示之用。我使用 pandas 来处理脚本中的所有数据计算。我希望使用 PyWIN32 将 pandas 数据帧写入 word.docx 文件中书签处的 table。数据框由浮点数组成。伪代码是这样的。
frame = DataFrame(np.arange(28).reshape((4,7)), columns=['Text1',...'Text7'])
导入pywin32...
wordApp = win32.gencache.EnsureDispatch('Word.Application')
wordApp.Visible = False
doc = wordApp.Documents.Open(os.getcwd()+'\template.docx')
rng = doc.Bookmarks("PUTTABLEHERE").Range
rng.InsertTable.here
现在我想在此书签上创建一个 table。 table 的尺寸应由数据框决定。我还希望列标题是 Word table.
中的 header
基本上,您需要做的就是在word中创建一个table,并根据数据框
的相应值填充每个单元格的值
# data frame
df= DataFrame(np.arange(28).reshape((4,7)), columns=['Text1',...'Text7'])
wordApp = win32.gencache.EnsureDispatch('Word.Application')
wordApp.Visible = False
doc = wordApp.Documents.Open(os.getcwd()+'\template.docx')
rng = doc.Bookmarks("PUTTABLEHERE").Range
# creating Table
# add one more row in table at word because you want to add column names as header
Table=rng.Tables.Add(rng,NumRows=df.shape[0]+1,NumColumns=df.shape[1])
for col in range(df.shape[1]):
# Writing column names
Table.Cell(1,col+1).Range.Text=str(df.columns[col])
for row in range(df.shape[0]):
# writing each value of data frame
Table.Cell(row+1+1,col+1).Range.Text=str(df.iloc[row,col])
注意Table.Cell(row+1+1,col+1)
这里加了两个。原因是因为Microsoft Word中的Table从1开始索引。所以,row和col都必须加1,因为pandas中的数据框索引从0开始。
在行中添加另一个 1,为数据框列提供 space 作为 headers。应该这样做!
我目前正在编写一个脚本,该脚本需要写入 .docx 文件以供演示之用。我使用 pandas 来处理脚本中的所有数据计算。我希望使用 PyWIN32 将 pandas 数据帧写入 word.docx 文件中书签处的 table。数据框由浮点数组成。伪代码是这样的。
frame = DataFrame(np.arange(28).reshape((4,7)), columns=['Text1',...'Text7'])
导入pywin32...
wordApp = win32.gencache.EnsureDispatch('Word.Application')
wordApp.Visible = False
doc = wordApp.Documents.Open(os.getcwd()+'\template.docx')
rng = doc.Bookmarks("PUTTABLEHERE").Range
rng.InsertTable.here
现在我想在此书签上创建一个 table。 table 的尺寸应由数据框决定。我还希望列标题是 Word table.
中的 header基本上,您需要做的就是在word中创建一个table,并根据数据框
的相应值填充每个单元格的值# data frame
df= DataFrame(np.arange(28).reshape((4,7)), columns=['Text1',...'Text7'])
wordApp = win32.gencache.EnsureDispatch('Word.Application')
wordApp.Visible = False
doc = wordApp.Documents.Open(os.getcwd()+'\template.docx')
rng = doc.Bookmarks("PUTTABLEHERE").Range
# creating Table
# add one more row in table at word because you want to add column names as header
Table=rng.Tables.Add(rng,NumRows=df.shape[0]+1,NumColumns=df.shape[1])
for col in range(df.shape[1]):
# Writing column names
Table.Cell(1,col+1).Range.Text=str(df.columns[col])
for row in range(df.shape[0]):
# writing each value of data frame
Table.Cell(row+1+1,col+1).Range.Text=str(df.iloc[row,col])
注意Table.Cell(row+1+1,col+1)
这里加了两个。原因是因为Microsoft Word中的Table从1开始索引。所以,row和col都必须加1,因为pandas中的数据框索引从0开始。
在行中添加另一个 1,为数据框列提供 space 作为 headers。应该这样做!