Python用openpyxl设置excel单元格属性——填充的详细测试

        最近写一个工具,要用到openpyxl设置excel单元格属性。网上关于这方面的介绍不少,其他属性设置的介绍都够详细了,但设置单元格填充属性的介绍都比较简单。于是自己查看openpyxl模块的源代码,并测试摸索,终于弄清楚了使用方法,现总结一下。若有错漏,敬请指出!

一、需要的导入

from openpyxl.styles import PatternFill, GradientFill

二、语法及可使用的参数说明

Excel的单元格填充有两种类型:PatternFill图案填充,和 GradientFill渐变色填充(对应Excel单元格格式设置面板中填充选项卡上的填充效果)。二者只能任选其一,不能同时使用。

1.PatternFill图案填充。

语法:

cell.fill = PatternFill(patternType=None, fgColor=Color(), bgColor=Color(), fill_type=None, start_color=None, end_color=None)

参数说明:

patternType或fill_type:填充图案类型。

fgColor或start_color:图案前景色。

bgColor或end_color:图案背景色。

六个参数实际生效的是三个,前述三组是别名关系。当patternType与fill_type同时给出时, fill_type优先生效,其值将赋给patternType。同理,start_color优先于fgColor生效,end_color优先于bgColor生效。

patternType或fill_type为'none'时无填充。其余可设置的值及对应的图案为:

 颜色:Color(rgb=None, indexed=None, auto=None, theme=None, tint=0.0, type=None)

若省略参数,则默认黑色。若指定颜色,有四种方式:

第一优先度方式:用颜色索引号,可用范围为1-63。

如fgColor=Color(rgb=None, indexed=4, auto=None, theme=None, tint=0.0, type='indexed')。可简写为fgColor=Color(indexed=4)。指定蓝色。

第二优先度方式:使用主题颜色号。

如fgColor=Color(rgb=None, indexed=None, auto=True, theme=None, tint=0.0, type='auto')。fgColor=Color(theme=1, tint=0.4),指定主题颜色1,浅化40%。tint值若为负值,如-0.25,表示主题颜色号深化25%。

第三优先度方式:使用自动颜色:

如fgColor=Color(rgb=None, indexed=None, auto=True, theme=None, tint=0.0, type='auto')。可简写为fgColor=Color(auto=Ture)。fgColor颜色auto为白色,bgColor颜色auto为无颜色。

第四优先度方式:使用不带透明度的rgb颜色,如fgColor=Color(rgb='FF0000')或fgColor='FF0000'。也可以使用带透明度的rgb颜色,如fgColor=Color(rgb='10FF0000')或fgColor='10FF0000'。实际测试中透明度值似乎不起作用。

第一种方式的颜色索引与颜色对应关系如下:

Index

0-4

00000000

00FFFFFF

00FF0000

0000FF00

000000FF

5-9

00FFFF00

00FF00FF

0000FFFF

00000000

00FFFFFF

10-14

00FF0000

### 使用 Pandas 和 OpenpyxlExcel 单元格进行批量填充 对于批量填充操作,Pandas 提供了一种高效的方式处理数据框中的数据并将其写入 Excel 文件。然而,在某些情况下,可能需要更细粒度的操作来控制具体的单元格内容更新,这时可以结合 `pandas` 和 `openpyxl` 库一起工作。 #### 方法一:通过 Pandas 更新整个列或行的内容 当目标是对特定的一整列或者多列执行相同的填充动作时,可以直接在 DataFrame 中设置新值: ```python import pandas as pd file_path = 'example.xlsx' df = pd.read_excel(file_path) # 假设要向名为 'Comments' 的列中填充值 "No Comment" df['Comments'] = "No Comment" with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer: df.to_excel(writer, index=False) ``` 这段代码会创建一个新的列 `'Comments'` 并给每一行赋同样的默认值 `"No Comment"`[^1]。 #### 方法二:使用 Openpyxl 进行精确位置的单元格填充 如果需求涉及到针对具体行列坐标的单个或多组单元格进行个性化填充,则更适合采用 `openpyxl` 来完成这项任务: ```python from openpyxl import load_workbook wb = load_workbook(filename=file_path) ws = wb.active for row in range(2, ws.max_row + 1): # 从第二行开始遍历(假设第一行为表头) cell_value = f"Custom Value {row}" ws[f'A{row}'] = cell_value # 修改 A 列对应行数的位置上的值 wb.save(file_path) ``` 上述脚本展示了如何迭代指定范围内的每行,并为选定区域内的每个单元格分配自定义字符串作为其值[^2]。 这两种方法各有优劣,前者适合于大规模同质化填充场景;后者则提供了更高的灵活性用于复杂模式下的精准定位填充
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值