我正在编写一个数据框架以脱颖而出并尝试添加边框。目前,我已经弄清楚了如何使用
将边界添加到工作表中bold = workbook.add_format({'bold': True, 'border': True})
worksheet.set_row(1, cell_format=bold)
,但这将边框扩展到数据框的最后一列。有没有办法在我的dataframe的最后一列中停止边界?
谢谢
我不确定它是否是您正在使用的,但可以使用包openpyxl
进行。
首先,我们可以创建一个测试数据框:
import openpyxl
from openpyxl.styles import Border, Side
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas
headers = ["column1", "column2", "column3"]
records = [{k: 0 for k in headers} for _ in range(25)]
df = pandas.DataFrame.from_records(records)
现在我们创建一个工作簿对象并将数据框放在其中:
wb = openpyxl.Workbook()
ws = wb.active
for row in dataframe_to_rows(df, index=False, header=True):
ws.append(row)
接下来,我定义了一个薄边界,该边框将在整个数据集周围使用
thin_border = Side(border_style="thin", color='FF000000')
现在,我构建了每个单独单元所需的边界。您没有指定要如何接壤数据,因此我假设整个框架的外部都有边界。由于我们知道列和行的数量,因此我们可以通过单元格进行迭代,并为Border
构造器构造参数,适用于纸张中的每个单元格。
for i in range(1, len(df) + 2): # Excel indexes at 1 and header row is extra
for j in range(1, len(headers) + 1):
sides = {"top": Side(), "bottom": Side(), "left": Side(), "right": Side()}
if j == 1: # Left Most Column:
sides["left"] = thin_border
if i == 1: # Top Row
sides["top"] = thin_border
if j == len(headers): # Right Most Column
sides["right"] = thin_border
if i == len(df) + 1: # Bottom Row
sides["bottom"] = thin_border
ws.cell(i, j).border = Border(**sides) # Apply sides to current cell
wb.save("output.xlsx")
请注意,我必须使用Border(**sides)
,因为Side
对象在软件包中不可变。我不确定是否有更有效的方法可以做到这一点,因为我没有太多的包裹经验,但是这样做了。
应该直接从这里施加边框,但是您认为合适。