单元格自适应宽度_最详细的Excel模块Openpyxl教程(二)-单元格操作详解

569d2dcd7e7c701ce1328fe89ea4534a.png

在以前的推文中,我们介绍了操作Excel的模块openpyxl的入门知识,相关推文可以从本公众号的底部相关菜单获取。接下来的推文我们来学习一下openpyxl这个python模块中的其他知识,本次推文我们来学习一下单元格(cell)操作的相关知识。

1.读取和设置单元格内容

上篇关于openpyxl的推文中我们介绍了一些基础的操作,也包含了读取和设置单元格内容的操作。我们先复习一下,假设现在有一个“cell_operation.xlsx”文件,文件中的数据如下:

22670e2fea125aee0d693a50212f10fd.png

我们来进行读取和设置单元格内容的操作:

from openpyxl import *
wb = load_workbook('cell_operation.xlsx')
ws = wb['Sheet1']
cell_value_1 = ws.cell(column=1, row=1).value
set_value_1 = ws.cell(column=1, row=9).value = 8
set_value_2 = ws.cell(column=1, row=10).value = '9'
print('cell_value_1:',cell_value_1)
wb.save('cell_operation.xlsx')
wb.close()

第四行到第六行代码是读取和设置单元格的操作,其中第四行代码为读取该单元格的内容,第五到第六行代码是用来设置单元格内容的,运行后Excel文件的结果如下:

4fc0a51c642156afd9b49633ec38dc98.png

我们可以看到单元格A10中的数据是文本格式的,这第五行代码设置值的时候是一致的。现在,我们还有一种方式的进行设置:

ws.cell(column=2, row=9, value="{0}".format(get_column_letter(1)))

这个方式设置的结果是B9单元格被设置了文本“A”。也就是说函数

get_column_letter将对应的数字转为字母letter,也就是单元格列字母,当然还有一种方式也可以进行设置,使用ASCII值进行获取:

letter = chr(i + 65)  # 由ASCII值获得对应的列字母

设置超链接:超链接设置也十分常用,比如在C3单元格进行设置一个超链接:

ws.cell(3,3).hyperlink = 'www.baidu.com'

接下来我们查看一个单元格常见的属性值看看:

print(ws.cell(column=2, row=9).column_letter)
print(ws.cell(column=2, row=9).coordinate)
print(ws.cell(column=2, row=9).col_idx)
print(ws.cell(column=2, row=9).encoding)
print(ws.cell(column=2, row=9).offset)
print(ws.cell(column=2, row=9).is_date)
print(ws.cell(column=2, row=9).data_type)
输出结果为:
B
B9
2
utf-8
<bound method Cell.offset of >
False
s

上述代码的输出我这里就不再进行解释了。输出的结果是一些Cell的属性,除了这些属性还有一些其他的属性如:

cell.has_style、cell.style、cell.style_id、cell.font、cell.alignment

cell.border、cell.fill、cell.number_format、cell.hyperlink

具体的这些属性的实现和意义大家可以在openpyxl中的Cell类中找到相应的解释。

ca03611c8d9c0f2c8f6491834575bb3e.png

上述就是一些常见的属性值,大家在工程中没有找到自己想要的就去源码类中人去寻找,后面的例子中也会使用到这些属性值,到时候我们可以在稍介绍一些。

注:在cell的方法中,有一个read_only类。如:

from openpyxl.cell import read_only
s_value = read_only.ReadOnlyCell( 'Sheet1', row=2, column=2, value=3, data_type='n')
print(s_value.value)
print(s_value.internal_value)

很显然这是只读模式下使用的,那么上述代码输出什么大家自己研究。

2.设置单元格宽度和高度

在实际的工作中,有时候我们需要对单元格的大小(即高度和宽度进行设置)。那么这个该怎么实现呢?假设现在我们需要对单元格的宽度和高度进行调整,调整的方式如下:我们以A1单元格为例:

# 调整列宽
ws.column_dimensions['A'].width = 20.0
# 调整行高
ws.row_dimensions[1].height = 40

这种设置还是非常简单的也是非常常见的。如果我们需要对不同的单元格进行设置我们使用for循环就可以了。

那么自适应的单元格该怎么设置呢?

关于这个自适应的单元格size的设置,本人没有找到可以直接使用的API,但是想到一个大概的方法:遍历列,找到最长的字符串,然后据此设置列的宽。这里我也正好给大家分享一个http://stackoverflow.com上一位开发者提供的代码:

def adjust_column_dimension(ws, min_row, min_col, max_col):column_widths = []for i, col in  enumerate(ws.iter_cols(min_col=min_col, max_col=max_col, min_row=min_row)):for cell in col:value = cell.valueif value is not None:if isinstance(value, str) is False:value = str(value)try:column_widths[i] = max(column_widths[i], len(value))except IndexError:column_widths.append(len(value))for i, width in enumerate(column_widths):col_name = get_column_letter(min_col + i)value = column_widths[i] + 2ws.column_dimensions[col_name].width = value# 使用 
adjust_column_dimension(ws, 1,1, ws.max_column)

稍微解释一下代码里面为什么使用了一个try-except呢?这个问题也比较简单,那么也留给大家思考咯!

3.合并单元格

合并单元格在日常中也是非常常见的,合并单元格有两种方式:

ws.merge_cells("A1:B1")
ws.merge_cells(start_column=3,end_column=5,start_row=3,end_row=5)
print(ws.merged_cells)
# A1:B1 C3:E5
print(ws.merged_cell_ranges)
# [<MergedCellRange A1:B1>, <MergedCellRange C3:E5>]

第一行代码直接使用单元格样式指出需要合并的单元格,第二行代码则是使用行列的方式来指明需要合并的单元格,第三行代码输出我们已经合并的单元格:A1:B1 C3:E5。第四行代码输出我们已经合并的单元格所组成的列表。

4.单元格样式设置

单元格常见的样式设置主要为:Font 字体、Side 边线、Border 边框、PatternFill 填充、Aignment 对齐的设置。

假设我们的数据样例为:

23ef872c80c28f619a77969e2c6c34d6.png

(一)接下来我们来进行Font的设置,代码如下

from openpyxl import*
from openpyxl.styles import PatternFill, Font, Alignment, Border, Sidewbook = load_workbook("cell_property_sets.xlsx")
wsheet = wbook['Sheet1']
font = Font(name='微软雅黑',size=11,color='FF000000',bold=True,italic=True,vertAlign='baseline',underline='double',strike=False)
wsheet['A2'].font = font
wbook.save("cell_property_sets.xlsx")
wbook.close()

设置后的结果如下,显然单元格A2被设置为我们想要设置的值,上述代码的设置的一些含义或属性为:字体名称、字体大小、字体颜色、加粗、斜体、垂直对齐方式、下划线、删除线。

d53b56e5df31c5855a795d83dadfee06.png

(二)接下来我们来进行Border和Side的设置,代码如下:

from openpyxl import*
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
wbook = load_workbook("cell_property_sets.xlsx")
wsheet = wbook['Sheet1']
side_type = Side(border_style='mediumDashDot',color='FF000000')
border = Border(left=side_type,right=side_type,top=side_type,bottom=side_type,diagonal=side_type,diagonal_direction=30,outline=side_type,vertical=side_type,horizontal=side_type)wsheet['A3'].border = border
wbook.save("cell_property_sets.xlsx")
wbook.close()

A3单元格设置后的样式如下:

f4ba4afc0208ce2335f8a2ff81e90f47.png

其中属性值border_style的值在源代码中给出了以下几种,大家可以试验一下,看看设置不同的值会有什么样的效果。

b2a3a78b9fd0afcc169ec27d92b202d1.png

(三)接下来我们来进行PatternFill填充的设置,代码如下:

from openpyxl import*
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
wbook = load_workbook("cell_property_sets.xlsx")
wsheet = wbook['Sheet1']
fill = PatternFill(fill_type = 'darkDown',start_color='A6DA70D6',end_color='000000')
wsheet['A4'].fill = fill
wbook.save("cell_property_sets.xlsx")
wbook.close()

设置结果如下:

5fba45e9976d2d4085ad4469408bbd05.png

这里有一些说明:

首先是参数fill_type,这个参数是填充的类型,openpyxl提供了以下几种属性。

f037109f8285aceaa6979740c68b010d.png

值的注意的是如果fill_type为None,则后续的参数都是不生效的。另外start_color代表前景色,这些颜色都是十六进制的aRGB颜色,a代表透明度。如果想要纯色填充的话可以就可以使用用fill_type = solid,然后使用前景色就可以了。

为方便大家使用颜色填充,这里对颜色的选择做出一个小的说明:

首先十六进制颜色码大家可以直接搜索相关的网站(或百度)就可以获取到,比如以下这个网页链接:https://www.sioe.cn/yingyong/yanse-rgb-16/

然后透明度怎么设置呢?这给出一个表:(透明度和对应的值,其中100%为完全不透明)

0411a441ac8df7105a045c1d4d85bf0b.png

假设现在我们有一个DA70D6十六进制颜色码,在其头部拼上一个透明度如B3,则这个aRGB颜色的值为:B3DA70D6。还是很简单的。

(四)接下来我们来进行Aignment 填充的设置,代码如下:

from openpyxl import*
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
wbook = load_workbook("cell_property_sets.xlsx")
wsheet = wbook['Sheet1']
align = Alignment(horizontal='center',vertical='center',text_rotation=0,wrap_text=True,shrink_to_fit=True,indent=0)wsheet['A6'].alignment = align
wbook.save("cell_property_sets.xlsx")
wbook.close()

参数说明:

# Horizontal:水平方向,左对齐left,居中center对齐和右对齐right可选。

# Vertical:垂直方向,有居中center,靠上top,靠下bottom,两端对齐justify等可选。

# text_rotation:文本旋转度。

# wrap_text:自动换行

# Indent:缩进。

注:单元格的属性是可以复制的,如:

from openpyxl.styles import Font
fsheet1 = Font(name='Arial', size=10)
# 复制时指定字体为“微软雅黑”,其他属性来自fsheet1
fsheet2 = fsheet1.copy(name="微软雅黑")

(五)接下来我们来进行单元格数字格式设置,代码如下:

单元格的数字格式也是常见的,大家可以在openpyxl中的numbers.py文件中找到数字的格式,这里贴一些:

230cb1ede2166369b2c56688ac6a867c.png
from openpyxl import*
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
wbook = load_workbook("cell_property_sets.xlsx")
wsheet = wbook['Sheet1']
wsheet['A9'].number_format = 'd-mmm-yy'
wbook.save("cell_property_sets.xlsx")
wbook.close()

设置后的结果如下:

076ffb9265a6c6e70d4597d7822d5f34.png

5.总结

以上就是本次的推文,推文介绍的内容比较简单,大家跟着学习的时候最好也跟着实践一下。后期我们将继续介绍其他方面的知识。比如在Excel中使用公式,进行表格的数据的过滤等操作。大家在学习的时候有什么疑问,也欢迎在评论区留言。

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

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

相关文章

动态参数 maven_使用Jenkins Git参数实现分支标签动态选择

1.1 为什么要使用GIT参数&#xff1f;我们为什么要使用 git参数呢&#xff1f; 每个项目代码库都会有不同的分支&#xff0c;(如果你没有用多分支流水线的情况下)对于普通的流水线项目我们可以 让一条流水线来支持多个分支的发布&#xff0c;其实有时候你会发现每个分支的集成步…

走线和交互式布线_画PCB时,一些非常好的布线技巧

画PCB时&#xff0c;一些非常好的布线技巧布线是PCB设计过程中技巧最细、限定最高的&#xff0c;即使布了十几年布线的工程师也往往觉得自己不会布线&#xff0c;因为看到了形形色色的问题&#xff0c;知道了这根线布了出去就会导致什么恶果&#xff0c;所以&#xff0c;就变的…

相机裁剪旋转_怎么旋转视频画面角度

在用手机或相机拍摄视频时&#xff0c;有时候画面会出现镜像、画面倒转的情况&#xff0c;影响观看体验&#xff0c;那么视频怎么旋转才能将画面变为正常播放&#xff1f;有很多方法可以做到&#xff0c;以下我为你挑选了最简单的工具&#xff0c;详细给你说说&#xff1a;在线…

新代数控系统参数说明书_台湾新代宏程序编程书

点击右上角关注公众号&#xff0c;每天更新其实说起来宏就是用公式来加工零件的&#xff0c;比如说椭圆,如果没有宏的话&#xff0c;我们要逐点算出曲线上的点&#xff0c;然后慢慢来用直线逼近&#xff0c;如果是个光洁度要求很高的工件的话&#xff0c;那么需要计算很多的点&…

pycharm 开发app_windows及mac下开发Excel, python+xlwings开发环境配置

背景&#xff1a;孩子他妈天天excel办公&#xff0c;看她每天大量重复性的工作&#xff0c;她是时候学习python来解放自己了&#xff0c;虽然我不用python ~ ~网络搜索 xlwings 是python下非常强大的处理Excel的库开发IDE选择Pycharm或者vs code配置开发环境&#xff0c;折腾了…

sql server查询历史进程_学习笔记 | SequoiaDB SQL查询语句执行过程

本篇笔记将为大家介绍 SequoiaDB 巨杉数据库查询 SQL 语句的执行过程&#xff0c;以及查询语句执行过程中实例层、协调节点、编码节点、数据节点各自承担的功能。应用程序或用户想要从数据库查询需要的数据&#xff0c;首先通过 API 或 client 端连接数据库&#xff0c;将查询 …

服务器主机linux安装mysql_linux服务器上安装mysql

mysql版本&#xff1a;mysql-5.6.44-linux-glibc2.12-x86_64.tarlinux操作系统和版本信息&#xff1a;1、检查linux服务器上是否已安全mysql[rootlocalhost ~]# rpm -qa|grep -i mysql未安装则无任何信息返回&#xff0c;若已安装则会返回已安装的版本信息&#xff0c;可通过--…

mysql中rownum分页_Oracle数据库中rownum分页

测试人员在项目测试中发现查询结果列表分页的时候&#xff0c;有的数据在好几页中重复显示&#xff0c;有的则一次都不显示&#xff0c;经过分析sql&#xff0c;原来问题出在测试人员在项目测试中发现查询结果列表分页的时候&#xff0c;有的数据在好几页中重复显示&#xff0c…

python买东西_Python实战之ATM+购物车

学python一个月以来的第一个工程级别项目!!!!!1.首先分析项目需求:模拟实现一个ATM 购物商城程序额度 15000或自定义---->注册功能实现购物商城&#xff0c;买东西加入 购物车&#xff0c;调用信用卡接口结账----->购物车,支付可以提现&#xff0c;手续费5%----->提现…

multi source replication mysql_MySQL 5.7多源复制(Multi-Source Replication)

MySQL5.7.6以后开始支持多源复制Multi-Source Replication,可以将多个主的库同步到一台slave上&#xff0c;从而增加从的利用率&#xff0c;出节省了机器&#xff0c;也可用于备份。首先设置master_info_repository和relay_log_info_repository两个参数&#xff0c;这存储同步信…

列模式 文本编辑器_UltraEdit 24.2 文本编辑器免费版

UltraEdit是由IDM官方最新出品的文本编辑器版本&#xff0c;它是一款性价比全球一流的文本、十六进制&#xff0c;HTML、PHP、Java 和 JavaScript程序文本编辑器&#xff0c;被认为是世界上最好的文本编辑器。UltraEdit可以满足您的所有需求&#xff0c;例如代码突出显示&#…

在linux中加固mysql_mysql在linux下的安装

安装环境&#xff1a;系统是 centos6.51、下载下载地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.6.html#downloads下载版本&#xff1a;我这里选择的5.6.33&#xff0c;通用版&#xff0c;linux下64位也可以直接复制64位的下载地址&#xff0c;通过命令下载&#x…

mysql 多条记录选择一套_2020-11-09-Mysql(练习题第一套)

遗留问题 select语句中的别名问题 group by 中的别名问题# sql-表 FACT_DAY_SC-字段 DEPT_ID varchar(20) 电厂TJSJ_DATE DATE 日期FSL number 日发电量create table FACT_DAY_SC(DEPT_ID varchar(20),TJSJ_DATE DATE,FSL LONG);insert into FACT_DAY_SC values (10001,2020-12…

wamp的mysql触发器教程_wamp里的mysql怎么做出这个

这个表怎么做这个是phpmyadmin&#xff0c;他是一个独立的程序&#xff0c;并不是wamp独有的&#xff0c;你也可以独立下载phpmyadmin来使用。首先&#xff0c;phpmyadmin你可以把他看作是一个php写的mysql管理工具。前端页面实际上就是HTML&#xff0c;和一般的网页没有什么区…

wx轮播图接口学习用json格式_零基础学小程序008----列表和轮播图的实现,小程序解析json数据...

点击下面网址进入系列教程上一节带领大家实现领简单的计算器&#xff0c;这节来带领大家学习小程序列表功能。本节知识点1&#xff0c;定义本地json文件2&#xff0c;本地文件引入3&#xff0c;小程序列表渲染实现4&#xff0c;解析本地json(为解析网络json做准备)学习之前先来…

云服务器怎么装mysql_云服务器(windows环境)安装mysql图文教程

1、首先进入的是安装引导界面2、然后进入的是类型选择界面&#xff0c;这里有3个类型&#xff1a;Typical(典型)、Complete(完全)、Custom(自定义)。这里建议选择“完全”(Complete)安装&#xff0c;这样可以自定义选择MySQL的安装目录&#xff0c;然后点“Next”下一步&#x…

阿里mysql 二进制_Mysql binlog 之阿里canal

1、What is Canal&#xff1f;canal [kənl]&#xff0c;中文翻译为 水道/管道/沟渠/运河&#xff0c;主要用途是用于 MySQL 数据库增量日志数据的订阅、消费和解析&#xff0c;是阿里巴巴开发并开源的&#xff0c;采用Java语言开发&#xff1b;历史背景是早期阿里巴巴因为杭州…

java 基本类型 引用类型_Java中的基本类型和引用类型变量的区别

基本类型&#xff1a;基本类型自然不用说了&#xff0c;它的值就是一个数字&#xff0c;一个字符或一个布尔值。引用类型&#xff1a;是一个对象类型&#xff0c;值是什么呢&#xff1f;它的值是指向内存空间的引用&#xff0c;就是地址&#xff0c;所指向的内存中保存着变量所…

mysql 学生成绩等级_JSP+SSM+Mysql实现的学生成绩管理系统

项目简介本系统是基于JSPSSMMysql实现的学生成绩管理系统。主要实现的功能有教师管理、学生管理、课程管理、学生成绩管理。难度等级&#xff1a;中等技术栈编辑器Eclipse Version: 2020-03 (4.15.0)前端技术基础&#xff1a;htmlcssJavaScript框架&#xff1a;JQueryH-ui后端技…

java ajax 导出excel文件_springMVC(4)---生成excel文件并导出

springMVC(4)---生成excel文件并导出在开发过程中&#xff0c;需要将数据库中的数据以excel表格的方式导出。首先说明。我这里用的是Apache的POI项目&#xff0c;它是目前比较成熟的HSSF接口&#xff0c;用来处理Excel对象。其实POI不仅仅只能处理excel&#xff0c;它还可以处理…