通过pywin32将pandas数据帧写入word文档表

时间:2015-07-22 03:08:10

标签: python pandas ms-word python-3.4 pywin32

我目前正在编写一个脚本,需要写入.docx文件以进行演示。我使用pandas来处理脚本中的所有数据计算。我期待使用PyWIN32将一个pandas数据帧写入word.docx文件中的书签的表中。数据框由浮点数组成。 psuedo代码是这样的。

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

现在我想在这个书签上创建一个表格。表格的大小应由数据框决定。我还希望列标题是Word表格中的标题。

1 个答案:

答案 0 :(得分:3)

基本上,您需要做的就是在word中创建一个表,并从数据框的相应值中填充每个单元格的值

# 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中的表从1开始索引。因此,必须将行和列添加1,因为pandas中的数据帧索引从0开始。

在行添加另一个1,为数据框列提供空间作为标题。应该这样做!