python文件处理-excel格式处理

简介: python文件处理-excel格式处理

前置条件


使用openpyxl打开excel表格,可以使用load_workbook()函数加载已有表格或者Workbook()函数创建新的表格。


调整列宽


需要用到Sheet.column_dimensions[‘列位置’].width

这条语句可以确定列位置,并用 width 属性,对该列的列宽进行修改。


比如说我想让第1列的列宽为20个单位,那么我就可以用 ws.column_dimensions[‘A’] 先确定找到第1列。


然后使用ws.column_dimensions[‘A’].width = 20进行赋值。


示例代码:

from openpyxl import load_workbook
# 打开工作表
file_path = './test.xlsx'
wb = load_workbook(file_path)
ws = wb.active
# 调整列宽
ws.column_dimensions['C'].width = 20
# 保存
wb.save(file_path)

调整单元格样式


单元格样式属性


单元格有很多的属性,比如上一节课学过的Cell.value属性,表示单元格的值。而关于单元格的样式属性,今天我们会了解到三个,基本可以对应Excel中这三处工具栏:

1.png1.边框样式由Cell.border属性表示


Excel中的边框样式非常丰富,有上下左右不同位置,还有边框的线条形状粗细,这些效果在openpyxl中可以实现吗?


当然可以,边框样式由Border对象来定义,线条由Side对象定义,想要什么样的都可以。因为通过对类的不同参数设置不同的参数值,就可以定义出各种不同的样式效果。


例如,如何定义一个细线条的下边框样式?


2.png

先定义个细线条的边框线 —— side = Side(‘thin’),thin表示细的。再来定义下边为细线条的边框样式boder1 —— boder1 = Border(bottom=side),bottom表示底部。所以底部边框是细线条的样式就定义好了。


是不是并不像想象的那么难?我们直接来看“边框”、“填充”、“对齐”等不同属性该如何定义吧。


2.颜色填充由Cell.fill属性表示

3.png

根据上面的图片,我们会发现:填充样式、对齐样式,与边框样式一样,都是由特定的类,实例化得到的。


而具体的样式效果则由参数来确定。比如填充样式PatternFill类的fgColor参数表示前景颜色,如果将颜色的RGB值传给该参数,就可以填充为该颜色。(填充一种颜色时,设置前景色即可。)


3.对齐方式由Cell.alignment属性表示


同理,对齐方式Alignment类的horizontal参数表示水平方向上的对齐,如果参数值是’center’则表示水平居中。


示例代码

# 从openpyxl库styles模块中导入四个类
from openpyxl.styles import PatternFill, Alignment, Side, Border
# 定义表头填充样式,颜色为橙色,纯色填充
header_fill = PatternFill('solid', fgColor='FF7F24')
# 定义表中填充样式,颜色为淡黄色,纯色填充
content_fill = PatternFill('solid', fgColor='FFFFE0')
# 定义表尾填充样式,颜色为淡桔红色,纯色填充
bottom_fill = PatternFill('solid', fgColor='EE9572')
# 定义对齐样式横向居中、纵向居中
align = Alignment(horizontal='center', vertical='center')
# 定义边样式为细边框
side = Side('thin')
# 定义表头边框样式,有底部和右侧细边框
header_border = Border(bottom=side, right=side)
# 定义表中、表尾边框样式,有左侧细边框
content_border = Border(left=side)

修改“表头”的单元格样式


例如下图,要将表头修改为这种样式:

4.png

表头是第一行的单元格,如果要取出这一行很简单,用ws[1]就可以了。然后就可以用for cell in ws[1]取出每个单元格,再来对单元格的样式属性进行修改。


不过,你可能会问,第一行的表格已经合并了,它不就是一个单元格吗?为什么还要循环修改呢?


这是因为,对于这个大的合并单元格来说,它其实不是单元格(Cell)对象,而是合并单元格(MergedCell)对象,合并单元格对象没有这些样式的属性。所以不能直接对这个大的单元格进行样式修改。


示例代码:

# 导入模块
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Alignment, Side, Border
# 定义表头颜色样式为橙色
header_fill = PatternFill('solid', fgColor='FF7F24')
# 定义表中颜色样式为淡黄色
content_fill = PatternFill('solid', fgColor='FFFFE0')
# 定义表尾颜色样式为淡桔红色
bottom_fill = PatternFill('solid', fgColor='EE9572')
# 定义对齐样式横向居中、纵向居中
align = Alignment(horizontal='center', vertical='center')
# 定义边样式为细条
side = Side('thin')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义表中、表尾边框样式,有左边
content_border = Border(left=side)
# 打开工作表
file_path = '事业01部_副本.xlsx'
wb = load_workbook(file_path)
ws = wb.active
# 循环第一行单元格,调整表头样式
for cell in ws[1]:
# 修改单元格填充颜色
cell.fill = header_fill
# 修改单元格对齐方式
cell.alignment = align
# 修改单元格边框
cell.border = header_border

现在我们已经实现对一个工作表中表头单元格样式的修改啦,赶紧继续来看表中单元格修改吧。


修改“表中”的单元格样式


来观察一下表中的单元格:

5.png

“表中”是中间2-9行的单元格,如果要取出这一行很简单,但是怎么取出这一个区域中的行,继而取出单元格呢?


不知道你还记不记得,我们之前接触过一个方法,可以取出工作表中一定范围的数据。


那就是工作表Sheet的iter_rows()方法,它有两个参数max_row和min_row,可以指定所取数据的行数范围(从min_row行取到max_row行为止)。


示例代码:

# 导入模块
from openpyxl import load_workbook
# 打开工作表
file_path = '事业01部_副本.xlsx'
wb = load_workbook(file_path)
ws = wb.active
# 打印出第2行到第9行
for row in ws.iter_rows(min_row=2, max_row=9, values_only=True):
    print(row)

以上代码运行后,是不是在终端看到8行由圆括号包起来的数据啦?这就是“事业01部_副本”工作表的“表中”区域——第2到第9行数据。


这里为了打印数值,还用到了一个之前也见过的参数设置——values_only=True,意思就是说只取数值。


待会儿我们遍历取出行,是要进行样式修改的,不能只取数值,所以使用iter_rows(min_row,max_row),此时values_only默认为False。


max_row


另外一个小知识点:max_row是工作表Sheet的一个属性,返回的属性值是一个整数。这个整数值代表了工作表的最大行数。如果工作表共有9行,那Sheet.max_row 返回的就是整数9。


有了Sheet.max_row得到最后一行的行号,不管是只有3行的工作表,还是有20多行的工作表,我们都可以轻松确定出“表中”这个范围结束的行号。


有了“表中”的数据范围,我们就可以循环取出其中每一行了,但是我们要想调整“表中”的单元格样式,还需要能够取到每一个单元格。这里我们需要用到for循环的嵌套

for row in ws.iter_rows(min_row=2, max_row = ws.max_row - 1):
    for cell in row:
        print(cell)

这样就能用for循环的嵌套,来取出“表中”的所有单元格了。


终于取出了单元格,可以正式进入主题:修改“表中”单元格的样式。


示例代码:

# 导入模块
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Alignment, Side, Border
# 定义表头颜色样式为橙色
header_fill = PatternFill('solid', fgColor='FF7F24')
# 定义表中颜色样式为淡黄色
content_fill = PatternFill('solid', fgColor='FFFFE0')
# 定义表尾颜色样式为淡桔红色
bottom_fill = PatternFill('solid', fgColor='EE9572')
# 定义对齐样式横向居中、纵向居中
align = Alignment(horizontal='center', vertical='center')
# 定义边样式为细条
side = Side('thin')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义表中、表尾边框样式,有左边
content_border = Border(left=side)
# 打开工作表
file_path = '事业01部_副本.xlsx'
wb = load_workbook(file_path)
ws = wb.active
# 获取最后一行行号
row_num = ws.max_row
# 从第二行开始,循环到倒数第二行
for row in ws.iter_rows(min_row=2, max_row=row_num-1):
# 循环取出单元格,调整表中样式
    for cell in row:
        cell.fill = content_fill
        cell.alignment = align
        cell.border = content_border

至此,表中的格式就修改完了,然后开始修改表尾的格式


修改“表尾”的单元格样式


由于表尾只有一行,我们只需要循环遍历这一行的所有单元格,并对其属性进行赋值即可。


示例要求:表尾单元格的样式是:颜色填充为淡桔红色;水平和垂直方向都居中;左侧有细框线。


示例代码:

# 导入模块
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Alignment, Side, Border
# 定义表头颜色样式为橙色
header_fill = PatternFill('solid', fgColor='FF7F24')
# 定义表中颜色样式为淡黄色
content_fill = PatternFill('solid', fgColor='FFFFE0')
# 定义表尾颜色样式为淡桔红色
bottom_fill = PatternFill('solid', fgColor='EE9572')
# 定义对齐样式横向居中、纵向居中
align = Alignment(horizontal='center', vertical='center')
# 定义边样式为细条
side = Side('thin')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义表中、表尾边框样式,有左边
content_border = Border(left=side)
# 打开工作表
file_path = './material/事业01部_副本.xlsx'
wb = load_workbook(file_path)
ws = wb.active
# 获取最后一行行号
row_num = ws.max_row
# 遍历最后一行
for cell in ws[row_num]:
# 循环取出单元格,调整表尾样式
    cell.fill = bottom_fill
    cell.alignment = align
    cell.border = content_border

至此,所有的格式都已经修改完毕了。


实现了对于单元格样式的修改,项目任务就算完成了,但是我们可不能忘记了保存工作簿,


不然对于该工作簿中所有的修改可都不会保存。


保存工作簿,用wb.save(文件路径)这条语句就可以啦。


总结


整体修改思路


先导入模块 ➡️ 定义单元格样式 ➡️ 打开工作表 ➡️ 调整列宽 ➡️ 修改单元格样式 ➡️ 保存工作簿。


知识点归纳总结


本次学习的知识点主要有openpyxl库的styles模块,里面有PatternFill、Border、Alignment三个对象分别可以用于定义“填充”样式、“边框”样式、“对齐方式”样式。这些对象分别有不同的参数,不同的参数值设置会有不同的样式效果。


将定义好的样式对象,分别赋值给对应的单元格Cell的fill、border、alignment属性,就可以修改单元格的这三个样式。


另外我们还学习了如何调整列宽,一条语句即可:Sheet.column_dimensions[‘列位置’].width = 列宽


还有一个新知识是:工作表的max_row属性,用它可以知道工作表对象的最大行数(最后一行的行号)。


总结图:

6.png

相关文章
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
2月前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
105 0
|
2月前
|
Python
Python格式
Python格式
34 5
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
190 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
4月前
|
数据挖掘
Excel条件格式
【10月更文挑战第21天】Excel条件格式
123 2
|
4月前
|
数据可视化 数据挖掘
Excel条件格式高级应用
【10月更文挑战第20天】Excel条件格式高级应用
84 3
|
4月前
|
Python
python读写操作excel日志
主要是读写操作,创建表格
83 2
|
4月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
268 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档

热门文章

最新文章

推荐镜像

更多