python - 如何在excel中设置边框到某一列
问题描述
我正在编写一个数据框来 excel 并尝试添加边框。目前,我已经弄清楚如何使用
bold = workbook.add_format({'bold': True, 'border': True})
worksheet.set_row(1, cell_format=bold)
但这会将边框延伸到数据框的最后一列之外。有没有办法在我的数据框的最后一列停止边界?
谢谢
解决方案
我不确定它是否是您正在使用的,但这可以通过 package 来完成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
对象在包中是不可变的。我不确定是否有更有效的方法来做到这一点,因为我对这个包没有很多经验,但这可以完成。
从这里开始应用边界应该很简单,但是你认为合适。
推荐阅读
- c++ - 为什么我的直通几何着色器不起作用?
- python - 具有不同值的多行的 fout.write(line.replace) 无法正常工作?
- c++ - 将模板参数约束为仅接受带有 C++20 概念的 std::vector 和 std::list
- asp.net - asp:SqlDataSource 与 ROWVERSION (TIMESTAMP)
- java - 从 UI 和 Firebase 实时数据库中删除 CardView 数据?
- python - 即使没有空间,验证字符串是否有可能的空间也会在 Django 表单中返回错误
- elasticsearch - 如果不通知查询中的分析器,则无法查询分析的字段
- javascript - 如何多次动态计算来自多个地方的结果?取消 Promise.All()
- elasticsearch - Elasticsearch 中的 Goal Scoring Streaks 查询
- ajax - 用于文件上传的 Graphileon 代理功能