将Python Dataframe编写为具有特定格式的Word / Excel文档

时间:2017-04-25 15:03:19

标签: python excel pandas conditional-formatting

您好我对python相对较新,并希望你们中的任何人都可以就模板事宜提供建议。

我设法解析了一个excel文件,从数据中创建了一个数据帧(使用xl.parse,.loc,str.contains,str.split,sort_index等方法)并将其输出到另一个excel中像这样的文件: Excel doc with dataframe

我坚持格式化 - 添加边框,加粗某些字符串行(不一定在两个不同输出文件之间的相同位置),突出显示某些带颜色的单元格等。

我有一个我必须遵循的模板,如此(word doc):Format to replicate (word doc)

我正在考虑两种方式:

1)从头开始通过python复制格式(作为excel或word doc)

2)使用模板

将输出excel文件中的原始数据写入word doc

如果有人可以告诉我哪种方式更有效,以及我可以研究哪些库,方法/功能来完成工作,那就太棒了。

谢谢!

2 个答案:

答案 0 :(得分:1)

有一些很好的方法可以做到这一点。我通常采用以下两种方法之一:

1)XLSX writer:此软件包支持更改Excel文件的格式。因此,我的工作流程是使用Python中的Pandas导出到Excel,然后在Excel文件中的数据后,我使用XLSX操作格式。从this demo可以看出,Pandas和XLSX Writer可以很好地协同工作。

2)对于某些工作流程,我发现我想在Excel中执行的格式化数量/类型与XLSX Writer不合理。在这些情况下,最好的办法是将您的数据放在不是Excel的内容中,然后将Excel链接到它。一种简单的方法是将数据转储到CSV,然后将格式良好的Excel文件链接到CSV。您还可以使用Pandas将数据推送到数据库,然后让Excel文件从数据库中提取数据。

答案 1 :(得分:1)

我建议使用xlsxwriter。您可以使用以下代码添加边框:

import xlsxwriter

# left
begcol = 2 # skip first col
endcol = ws.UsedRange.Columns.Count
begrow = 2 # skip first row
endrow = ws.UsedRange.Rows.Count

ws.Range(ws.Cells(begrow, begcol), 
         ws.Cells(endrow, endcol)).Borders(7).LineStyle = 1 # continuous
ws.Range(ws.Cells(begrow, begcol), 
         ws.Cells(endrow, endcol)).Borders(7).Weight = 2 # thin

你可以用这种方式加粗:

# bold last row
ws.Range(ws.Cells(endrow, begcol),
         ws.Cells(endrow, endcol)).Font.Bold = True

您可以像这样设置单元格的背景颜色:

format = workbook.add_format()

format.set_pattern(1)  # This is optional when using a solid fill.
format.set_bg_color('green')

worksheet.write('A1', 'Ray', format)

要写入Word文档,您可以使用docx以及如何执行此操作的示例:http://pbpython.com/python-word-template.html