如何在Excel中设置边框直到特定列

时间:2019-06-28 18:35:44

标签: python excel dataframe

我正在编写一个Excel数据框并尝试添加边框。目前,我已经弄清楚了如何使用

将边框添加到工作表中
bold = workbook.add_format({'bold': True, 'border': True})
worksheet.set_row(1, cell_format=bold)

,但这将边框扩展到数据框的最后一列。有没有办法在数据框的最后一列停止边界?

谢谢

1 个答案:

答案 0 :(得分:1)

我不确定是否是您正在使用的那个,但是可以使用软件包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。我不确定是否有更有效的方法来执行此操作,因为我对该程序包没有太多的经验,但是可以做到这一点。

从这里开始应用边框应该很简单,但是您认为合适。