Python操作Excel文件,修改Excel样式(openpyxl)

秋风阁-北溪入江流

文章目录

  • 安装依赖库`openpyxl`
  • `openpyxl`的操作
    • 加载文件,获取sheet
      • 加载文件`load_workbook`
      • 获取sheet
    • 遍历单元格
      • 迭代遍历
      • 索引遍历
    • 单元格行高和列宽的修改
      • Excel列号与字母的转换
      • Excel行高修改
      • Excel列宽修改
    • Excel表格文字对齐属性设置
    • 修改单元格框线
    • 保存Excel文件
  • `openpyxl`实战,Excel样式优化

在操作Excel表格时,我们有时需要对Excel表中的内容样式进行修改。当Excel文件过大的情况下修改样式单元格较多,修改麻烦,可采用代码脚本的方式来进行Excel样式的修改

安装依赖库openpyxl

pip install openpyxl

openpyxl的操作

加载文件,获取sheet

加载文件load_workbook

在Excel中,一般把一个文件称为工作薄。在openpyxl中可以通过load_workbook()方法来加载一个文件,返回Workbook对象。Workbook对象会保存Excel表中的所有相关信息。

from openpyxl import load_workbookload_workbook(file_path)

获取sheet

在一个Excel文件中会有多个sheet表格,所以当操作Excel文件时,需要对多个sheet分别处理。在对多个sheet表格进行处理时,可以通过先获取表格内部所有的sheetname,然后在通过sheetname获取对应的sheet

  • openpyxl中可以通过workbook.get_sheet_names()方法来获取所需所有sheetname列表
    • openpyxlworkbook.get_sheet_names()方法将在后续版本废除,可以通过workbook.sheetnames属性来获取所有的sheetname
  • 获取到对应的sheetname名称后,可以通过workbook.get_sheet_by_name(sheetname)的方法获取对应的sheet,然后对sheet中的单元格进行操作
    • openpyxlworkbook.get_sheet_by_name(sheetname)方法将在后续版本废除,可以通过workbook.[sheetname]属性来获取对应的sheet
sheetnames = workbook.get_sheet_names()for sheetname in sheetnames:sheet = workbook.get_sheet_by_name(sheetname)...
  • openpyxl中可以通过workbook.sheetnames的方法获取所有的sheetname。推荐使用
  • openpyxl中可以通过workbook.[sheetname]的方法根据sheetname获取对应的sheet。推荐使用
sheetnames = workbook.sheetnamesfor sheetname in sheetnames:sheet = workbook[sheetname]...

遍历单元格

Excel表格格式作为二维的结构化文件存储格式,对其数据遍历读取修改可以按照行的方式或列的方式进行遍历。

迭代遍历

openpyxl中可以通过sheet.rows按行获取数据或sheet.columns按列获取数据。获取到每一行或者每一列的数据后在对其迭代遍历即可获取到具体的单元格cell,可以通过cell.value获取单元格的具体值。
按行遍历:

for row in sheet.rows:for cell in row:value = cell.value...

按列遍历:

for col in sheet.columns:for cell in col:value = cell.value...

索引遍历

通过sheet.rowssheet.columns属性可以很好对按行或按列对表格进行迭代遍历,但是有时我们在遍历的过程中希望知道当前遍历对象的索引,迭代遍历不能很好的满足我们的需求。
sheet.rowssheet.columns属性中返回的是一个迭代器,所以不能直接根据索引获取内容,所以需要先将其转换成列表然后获取索引来实现遍历
注意,索引遍历因为将sheet的属性转存了,所以在索引遍历中对内容的修改并不会影响到Workbook对象,所以索引遍历的优点是仅能获取到对应的索引,并不能对属性进行修改。
按行索引:

rows = list(sheet.rows)for row_index in range(sheet.max_row):for col_index in range(len(rows[row_index])):value = rows[row_index][col_index].value...

按列索引:

columns = list(sheet.columns)for col_index in range(sheet.max_column):for row_index in range(len(columns[col_index])):value = columns[col_index][row_index].value...

单元格行高和列宽的修改

Excel列号与字母的转换

在Excel中,行号以数字1为下标开始索引,列号以字母A为下标开始索引。在编程语言中一般以下标0为下标开始索引。所以在处理列的时候需要将数字下标转换为相应的字母下标来获取对应的列。openpyxl提供列专门的转换工具。

  • openpyxl.utils.get_column_letter(index: int):实现数字下标到列号字母的转换
  • openpyxl.utils.column_index_from_string(str_col: str):实现列号字母到数字下标到转换

Excel行高修改

在进行Excel行高的修改时,需要先根据对应的行号获取到对应的行,然后对行高修改。
openpyxl中通过sheet.row_dimensions[row_number]获取到对应的行,修改sheet.row_dimensions[row_number].height属性来修改行高。

rows = list(sheet.rows)for row_index in range(sheet.max_row):for col_index in range(len(rows[row_index])):sheet.row_dimensions[row_index + 1].height = 100

Excel列宽修改

在进行Excel列宽的修改时,需要先根据对应的列号索引获取对应列的字母下标,然后根据字母下标获取对应列,对列宽修改。
openpyxl中通过sheet.column_dimensions[col_number]获取到对应的列,修改sheet.column_dimensions[col_number].width属性来修改列宽。

columns = list(sheet.columns)for col_index in range(sheet.max_column):for row_index in range(len(columns[col_index])):sheet.column_dimensions[get_column_letter(col_index + 1)].width = 100

Excel表格文字对齐属性设置

在对Excel的行高和列宽属性进行修改后,由于文字的对齐设置往往会导致部分单元格中字体的显示效果不好。这时我们可以设置文字的对齐属性来修改文字在单元格中的排布。
在Excel中,对齐属性是针对单元格而言的,所以我们需要获取到对应的单元格而不是行列。对齐属性可以分为水平对齐属性和垂直对齐属性,需要对这两个维度的属性分别进行设置。

  • 获取单元格:在openpyxl中获取单元格是根据sheet按照先列后行的维度进行获取
cell = sheet[f"{get_column_letter(col_number)}{row_number}"]
  • 对齐属性:在openpyxl中对齐属性通过对象Alignment进行设置修改
    • 水平方向:horizontal属性
      • left:左对齐
      • center:水平居中
      • right:右对齐
      • justify:两端对齐
    • 垂直方向:vertical属性
      • top:顶端对齐
      • center:垂直居中
      • bottom:底端对齐
from openpyxl.styles import Alignmentalignment = Alignment(horizontal="justify", vertical="center")
  • 修改对齐属性:通过修改单元格的alignment属性来修改对齐属性
from openpyxl.styles import Alignmentalignment = Alignment(horizontal="justify", vertical="center")
sheet[f"{get_column_letter(col_number)}{row_number}"].alignment = alignment

修改单元格框线

在Excel中,针对表格的框线同样也是针对单元格而言的。openpyxl中修改框线通过Border对象来设置。由于边框线分别有上下左右四个方向的框线,所以需要分别对四个方向的框线进行设置。在Boder对象中通过Side属性来设置某一方向上的线条。

  • Border对象:单元格框线
    • 方向:
      • top:上边框线条设置
      • bottom:下边框线条设置
      • left:左边框线条设置
      • right:右边框线条设置
    • 线条属性Side对象:
      • style:设置线条的属性
        • 可选属性:dashDotdashDotDotdasheddotteddoublehairmediummediumDashDotmediumDashDotDotmediumDashedslantDashDotthickthin
        • 线条的可选属性较多,一般选择常用的thin线条即可
      • color:设置线条颜色,类型HEX格式的颜色属性,默认黑色
  • 修改单元格边框:通过修改单元格的border属性来修改边框颜色
from openpyxl.styles.borders import Border, Sidethin_border = Border(top=Side(style='thin'),bottom=Side(style='thin'),left=Side(style='thin'),right=Side(style='thin')
)
sheet[f"{get_column_letter(col_number)}{row_number}"].border = thin_border

保存Excel文件

在上文中提到,调用openpyxl.load_workbook()方法会返回一个Workbook对象,对象中包含了Excel中的相关信息属性,我们在后文中对Excel的修改,本质上都是对Workbook对象的属性进行修改,所以在保存是是需要调用workbook.save(file_path)即可将修改后的内容写入Excel文件中。

openpyxl实战,Excel样式优化

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter, column_index_from_string
from openpyxl.styles import Alignment
from openpyxl.styles.borders import Border, Sidedef pref_excel_style(file_path):"""优化Excel样式根据单元格内文字长度优化行高和列宽优化单元格边框样式"""# 边框样式thin_border = Border(top=Side(style='thin'),bottom=Side(style='thin'),left=Side(style='thin'),right=Side(style='thin'),)# 对齐属性alignment = Alignment(horizontal="justify", vertical="center")# 获取工作博workbook = load_workbook(file_path)# 根据sheet名称来获取当前工作表,逐sheet修改for sheetname in workbook.sheetnames:sheet = workbook[sheetname]columns = list(sheet.columns)rows = list(sheet.rows)# 列遍历获取每列最长cell,修改单元格宽度for col_index in range(len(columns)):try:max_col_len = max(len(cell.value) for cell in columns[col_index] if cell.value is not None)# 修改cell宽度if max_col_len < 50:sheet.column_dimensions[get_column_letter(col_index + 1)].width = max_col_len * 2.5 + 2else:sheet.column_dimensions[get_column_letter(col_index + 1)].width = 130except (ValueError, IndexError) as error:# 捕获在多个sheet的情况下,其余sheet内无数据导致的调用max()方法异常...# 行遍历获取没行最长cell,修改行高和超出长度单元格排布属性for row_index in range(len(rows)):try:max_row_len = max(len(cell.value) for cell in rows[row_index] if cell.value is not None)if max_row_len > 50:sheet.row_dimensions[row_index + 1].height = max_row_len / 50 * 20for col_index in range(sheet.max_column):# 修复文字内容过长情况下修改cell高度文字的排版情况sheet[f"{get_column_letter(col_index + 1)}{row_index + 1}"].alignment = alignmentexcept (ValueError, IndexError) as error:...# 所有数据添加单元格for row in sheet.rows:for cell in row:cell.border = thin_borderworkbook.save(file_path)

以上的行高和列宽与单元格文字长度是通过设置Excel最适合的行高和最适合的列宽厚根据比例关系经过多次试验后得到了修改样式后显示效果较优的关系,可根据自身需求更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浮标水质监测站现场水质自动监测仪

浮标水质监测站是设立在河流、湖泊、水库、近岸海域等流域内进行现场水质自动监测的监测仪器&#xff0c;是以水质监测仪为核心&#xff0c;运用传感器技术&#xff0c;结合浮标体、电源供电系统、数据传输设备组成的放置于水域内的小型水质监测系统。用于连续自动监测被测水体…

Python的用处到底是什么?(一)

1. 网络爬虫&#xff1a;使用Python的库&#xff0c;如BeautifulSoup&#xff0c;可以轻松地从网页中提取数据。 当涉及到从互联网上收集大量数据时&#xff0c;Python是一个非常强大的语言&#xff0c;它提供了许多用于网络爬虫的库和工具。其中最常用的库之一是BeautifulSou…

DAY3,Qt(完成闹钟的实现,定时器事件处理函数的使用)

1.完成闹钟的实现&#xff0c;到点播报文本框的内容&#xff1b; ---alarm.h---头文件 #ifndef ALARM_H #define ALARM_H#include <QWidget> #include <QTimerEvent> //定时器处理函数类 #include <QTime> //时间类 #include <QPushButton> //按钮…

蓝牙技术|智能照明市场蓬勃发展,蓝牙技术助力市场发展

照明控制系统在商业和工业领域的应用广泛。例如&#xff0c;智能办公楼、商场、工厂等场所&#xff0c;可以通过照明控制系统实现节能和舒适性的提升。预计将从2023年的74亿美元增长到2032年的108亿美元&#xff0c;复合年增长率(CAGR)为4.3%。 随着LED照明技术在市场上的逐渐普…

QT DAY3

1.思维导图 2.完成闹钟的实现 头文件 #include <QTextToSpeech> #include <QTextEdit> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTQLineEdit *edit1new QLineEdit;// QTextEdit *edit2new QTe…

什么是DPA实验,DPA的应用场景行业及可检测的问题要点总结

🏡《电子元器件学习目录》 目录 1,什么是DPA实验2,DPA的起源与应用行业3,DPA的应用场景4,DPA可检测的问题4.1,性能下降4.2,工艺问题4.3,结构问题4.4,可靠性问题4.5,交货检验5,总结1,什么是DPA实验 DPA是Destructive Physical Analysis的缩写,DPA实验又被称为破坏…

java版企业工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

新手小白学习SWAT模型【建模方法、实例应用、高级进阶】

目录 第一部分&#xff1a;SWAT模型实践部分 第二部分&#xff1a;SWAT模型【进阶部分】 更多推荐 【专家】&#xff1a;刘老师【副教授】&#xff0c;北京重点高校资深专家&#xff0c;和美国SWAT软件开发方长期合作&#xff0c;拥有丰富的科研及工程技术经验&#xff0c;长…

【双指针优化DP】CF985E

Problem - 985E - Codeforces 题意&#xff1a; 思路&#xff1a; 首先肯定需要排个序&#xff0c;然后分段DP 但是平常写的分段DP都是n^2的&#xff0c;这里的可以发现单调性&#xff0c;因此考虑双指针转移 这里两个指针都代表两个段的右端点 Code&#xff1a; #includ…

MySQL-MHA高可用配置及故障切换

MySQL-MHA 一、MHA概述&#xff1a;1.概述&#xff1a;2.MHA的组成&#xff1a;3.MHA的特点&#xff1a;4.MHA的工作原理&#xff1a; 二、搭建MySQL MHA&#xff1a;1.配置主从复制&#xff1a;2.配置MHA&#xff1a;3.manager与node工具使用&#xff1a;4.在 manager 节点上配…

Redis优惠券秒杀超卖问题

Redis秒杀超卖问题 前言一、出现秒杀超卖的原因二、超卖解决方案使用乐观锁解决超卖问题程序中进行解决 前言 这是我认为b站上最好的redis教程&#xff0c;各方面讲解透彻&#xff0c;知识点覆盖比较全。 黑马redis视频链接&#xff1a;B站黑马redis教学视频 本文参考黑马redi…

vue使用qrcodejs2-fix或者qrcodejs2插件生成二维码

1. vue2安装 npm i qrcodejs2 1.1. vue3安装 npm install qrcodejs2-fix 2. 组件中引入并封装成公共组件&#xff0c;vue3版 <template><!-- 二维码生成 --><div class"body-div"><div style"width: 100%;height: 100%;" :id&quo…

入门Linux基本指令(2)

这篇文章主要提供一些对文件操作的Linux基本指令&#xff0c;希望对大家有所帮助&#xff0c;三连支持&#xff01; 目录 cp指令(复制) mv指令(剪切) nano指令 cat指令(打印文件内容) > 输出重定向 >> 追加重定向 < 输入重定向 more指令 less指令(推荐) …

Ueditor 百度强大富文本Springboot 项目集成使用(包含上传文件和上传图片的功能使用)简单易懂,举一反三

Ueditor 百度强大富文本Springboot 项目集成使用 首先如果大家的富文本中不考虑图片或者附件的情况下&#xff0c;只考虑纯文本且排版的情况下我们可以直接让前端的vue来继承UEditor就可以啦。但是要让前端将那几个上传图片和附件的哪些功能给阉割掉&#xff01; 然后就是说如…

Spring Batch教程(三)示例:从mysql中读取数据写入文本和从多个文本中读取内容写入mysql

Spring batch 系列文章 Spring Batch教程&#xff08;一&#xff09; 简单的介绍以及通过springbatch将xml文件转成txt文件 Spring Batch教程&#xff08;二&#xff09;示例&#xff1a;将txt文件转成xml文件以及读取xml文件内容存储到数据库mysql Spring Batch教程&#xff…

P8605 [蓝桥杯 2013 国 AC] 网络寻路 (dfs+理解题意)

题意&#xff1a;找一条四边的路径&#xff0c;保住中间两个节点编号只能出现一次&#xff08;起点&#xff08;首&#xff09;和终点&#xff08;未&#xff09;可以一样&#xff09; else{if(k3&&toBegin){//首未一样的情况&#xff08;前提是未已经是四边的最后一点…

HTML的表格应用

HTML 中的表格用于在网页上展示和组织数据。表格由行和列组成&#xff0c;每个单元格可以包含文本、图像或其他 HTML 元素。下面是一些常用的 HTML 表格标签和属性的应用示例&#xff1a; <table> 标签: 定义表格的起始和结束标记。所有的表格元素应该放在这对标签之间。…

elasticsearch IK分词器

说明&#xff1a;es默认的分词器对中文的识别不是特别好&#xff0c;一段话的分词是一个一个汉字&#xff0c;这显然没有达到想要的结果。 可以安装IK分词器&#xff0c;兼容中文的分词&#xff1b; IK分词器 安装 安装IK分词器&#xff0c;例如elasticsearch的容器名为es&a…

MATLAB与ROS联合仿真——控制类功能模块介绍

1、Keyboard Control &#xff08;1&#xff09;输入参数&#xff1a;无 &#xff08;2&#xff09;输出参数&#xff1a;Speed Factor为输出的速度系数&#xff08;1代表前行&#xff0c;0停止&#xff0c;-1代表后退&#xff09;&#xff0c;Turn Factor为输出的舵机系数&am…

【Matlab】基于卷积神经网络的时间序列预测(Excel可直接替换数据)

【Matlab】基于卷积神经网络的时间序列预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码6.完整代码7.运行结果1.模型原理 基于卷积神经网络(Convolutional Neural Network,CNN)的时间序列预测是一种用于处理时间序列数据的深度学习方法。…