处理Excel电子表格
一个Excel电子表格文档称为一个工作薄。
每个工作薄可以包含多个工作表。
用户当前查看的表,称为活动表。
python没有自带openpyxl,所以必须安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
c:\python\Scripts>pip3.6 install openpyxl
Collecting openpyxl
Downloading openpyxl-2.4.9.tar.gz (157kB)
100% |████████████████████████████████| 163kB 183kB/s
Collecting jdcal (from openpyxl)
Downloading jdcal-1.3.tar.gz
Collecting et_xmlfile (from openpyxl)
Downloading et_xmlfile-1.0.1.tar.gz
Installing collected packages: jdcal, et-xmlfile, openpyxl
Running setup.py install for jdcal ... done
Running setup.py install for et-xmlfile ... done
Running setup.py install for openpyxl ... done
Successfully installed et-xmlfile-1.0.1 jdcal-1.3 openpyxl-2.4.9
c:\python>python.exe
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import openpyxl
>>>
|
用openpyxl模块打开Excel文档
1
2
3
4
|
>>> import openpyxl
>>> wb = openpyxl.load_workbook( 'example.xlsx' )
>>> type (wb)
< class 'openpyxl.workbook.workbook.Workbook' >
|
openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值。这个workbook对象代表这个Excel文件。
example.xlsx需要在当前工作目录,才能处理它。可以导入os,使用函数os.getcwd()确定当前工作目录,并用os.chdir()改变当前工作目录。
从工作薄中取得工作表
调用get_sheet_names()方法可以取得工作薄中所有表名的列表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> import openpyxl
>>> wb = openpyxl.load_workbook( 'example.xlsx' )
>>> wb.get_sheet_names()
[ 'Sheet1' , 'Sheet2' , 'Sheet3' ]
>>> sheet = wb.get_sheet_by_name( 'Sheet3' )
>>> sheet
<Worksheet "Sheet3" >
>>> type (sheet)
< class 'openpyxl.worksheet.worksheet.Worksheet' >
>>> sheet.title
'Sheet3'
>>> anotherSheet = wb.get_active_sheet()
>>> anotherSheet
<Worksheet "Sheet3" >
|
每个表由一个Worksheet对象表示,可以通过向工作薄方法get_sheet_by_name()传递表名字符串获得。
调用Workbook对象的get_active_sheet()方法,取得工作薄的活动表。
从表中取得单元格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
>>> import openpyxl
>>> wb = openpyxl.load_workbook( 'example.xlsx' )
>>> sheet = wb.get_sheet_by_name( 'Sheet1' )
>>> sheet[ 'A1' ]
<Cell 'Sheet1' .A1>
>>> sheet[ 'A1' ].value = 'apple'
>>> sheet[ 'A1' ].value
'apple'
>>> c = sheet[ 'B1' ]
>>> c.value = 'juice'
>>> str (c.row)
'1'
>>> c.row
1
>>> c.column
'B'
>>> c.coordinate
'B1'
|
Cell对象的value属性,包含这个单元格中保存的值。
Cell对象也有row、column和coordinate属性,提供该单元格的位置信息。
第一行或第一列的整数是1,不是0。
1
2
3
4
5
6
7
8
9
10
11
|
>>> sheet.cell(row = 1 ,column = 2 )
<Cell 'Sheet1' .B1>
>>> sheet.cell(row = 1 ,column = 2 ).value
'juice'
>>> for i in range ( 1 , 8 , 2 ):
... print (i,sheet.cell(row = i,column = 2 ).value)
...
1 juice
3 None
5 None
7 None
|
可以通过Worksheet对象的get_highest_row()和get_highest_column()方法,确定表的大小。
get_highest_column()方法返回一个整数,而不是Excel中出现的字母。
列字母和数字之间的转换
要从字母转换到数字,就调用openpyxl.cell.column_index_from_string()函数。
要从数字转换到字母,就调用openpyxl.cell.get_column_letter()函数。
从表中取得行和列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
>>> import openpyxl
>>> wb = openpyxl.load_workbook( 'example.xlsx' )
>>> sheet = wb.get_sheet_by_name( 'Sheet1' )
>>> tuple (sheet[ 'A1' : 'C3' ])
((<Cell 'Sheet1' .A1>, <Cell 'Sheet1' .B1>, <Cell 'Sheet1' .C1>), (<Cell 'Sheet1' .A2>, <Cell 'Sheet1' .B2>, <Cell 'Sheet1' .C2>), (<Cell 'Sheet1' .A3>, <Cell 'Sheet1' .B3>, <Cell 'Sheet1' .C3>))
>>> for i in sheet[ 'A1' : 'C3' ]:
... for j in i:
... print (j.coordinate,j.value)
... print ( '--- END OF ROW ---' )
...
A1 apple
B1 juice
C1 cake
- - - END OF ROW - - -
A2 None
B2 nurse
C2 None
- - - END OF ROW - - -
A3 None
B3 None
C3 None
- - - END OF ROW - - -
|
总结:
1、导入openpyxl模块
2、调用openpyxl.load_workbook()函数
3、取得Workbook对象
4、调用get_active_sheet()或get_sheet_by_name()工作薄方法
5、取得Worksheet对象
6、使用索引或工作表的cell()方法,带上row和column关键字参数
7、取得Cell对象
8、读取Cell对象的value属性
【扩展】
1、Font对象
Font对象的style属性影响文本在单元格中的显示方式。
要设置字体风格属性,就向Font()函数传入关键字参数。
2、公式
1
2
|
>>> sheet[ 'B10' ] = '=sum(B1:B9)'
>>> wb.save( 'example.xlsx' ) ##保存
|
3、调整行和列
Worksheet对象由row_dimensions和column_dimensions属性,控制行高和列宽。
1
2
3
|
>>> sheet.row_dimensions[ 1 ].height = 70
>>> sheet.column_dimensions[ 'B' ].width = 40
>>> wb.save( 'example.xlsx' )
|
利用merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格。
要拆分单元格,就调用unmerge_cells()工作表方法。
1
2
|
>>> sheet.merge_cells( 'A1:D3' )
>>> wb.save( 'example.xlsx' )
|
在OpenPyXL中,每个Worksheet对象都有一个freeze_panes属性,可以设置为一个Cell对象或一个单元格坐标的字符串。
单元格上边的所有行和左边的所有列都会冻结,但单元格所在的行和列不会冻结。
要解冻所有的单元格,就将freeze_panes设置为None或‘A1’。
1
2
|
>>> sheet.freeze_panes = 'A2' ##行1将永远可见
>>> wb.save( 'example.xlsx' )
|
如果需要创建图标,需要做下列事情:
1、从一个矩形区域选择的单元格,创建一个Reference对象
2、通过传入Reference对象,创建一个Series对象
3、创建一个Chart对象
4、将Series对象添加到Chart对象
5、可选地设置Chart对象的drawing.top、drawing.left、drawing.width和drawing.height变量
6、将Chart对象添加到Worksheet对象
如果加载一个Workbook对象,然后马上保存到同样的.xlsx文件名中,实际上会删除其中的图表。
处理Excel电子表格相关推荐
- 计算机用电子表格验证方案,Excel电子表格的验证1.PDF
Excel电子表格的验证1.PDF IZ STUDIO IZ STUDIO OMCL 指南:计算机化系统验证 附录 1:Excel 电子表格的验证 1 Excel 电子表格的验证 注:本指南及其附录中 ...
- 介绍一款开源的类Excel电子表格软件
Excel一直以霸主的地位,占领了Windows桌面表格软件市场No 1,与此同一时候,Office套装产品差点儿成为了IT行业的标配办公技能.有无相似Excel的桌面程序,绿色版,实现主要的数 ...
- 在PHP中创建和编辑Excel电子表格
要使用纯PHP创建或编辑Excel电子表格,我们将使用PHPExcel库,它可以读写许多电子表格格式,包括xls,xlsx,ods和csv.在我们继续之前,仔细检查您的服务器上是否有PHP 5.2或更 ...
- 网页中模拟Excel电子表格实例分享
2019独角兽企业重金招聘Python工程师标准>>> 原文来自http://www.6excel.com/doc/20049 一.电子表格中用到的快捷键: ← → ↑ ↓ :左, ...
- npoi生成的表格数字左上角_如何用openpyxl自动化编写Excel电子表格 进阶篇 下
自动化Excel进阶技能之一:添加图片 尽管Excel电子表格中并不经常都是插入图片的,但是添加了图片以及图片里插入里url链接,这还是相当实用的.我们可以用它来做品牌宣传,或者让Excel表格更加个 ...
- excel表格大学计算机知识,大学计算机基础excel电子表格
大学计算机基础excel电子表格 Excel 2003电子表格 Office 2003 Office 2003 软件之二软件之二 主要内容 一.Excel 2003的基本知识 二.Excel 2003 ...
- asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格
有很多不同的东西你可以写到电子表格,从简单的文本或数字值到复杂的公式,图表,甚至图像. 创建一个简单的电子表格 之前,大家看到了一个非常快速的例子,就是如何将 "Hello world!&q ...
- 计算机应用基础形考作业3Excel,国家开放大学《计算机应用基础》考试与答案形考任务模块3 模块3 Excel 电子表格系统—客观题答案(2020年整理).pptx...
国家开放大学<计算机应用基础>考试与答案形考任务模块3 模块3 Excel 电子表格系统-客观题答案(2020年整理).pptx 学 海 无 涯 Excel 2010 上机操作题(共 5 ...
- java excil表格开发_JAVA导出Excel电子表格的方法
JAVA导出Excel电子表格的方法 package com.qingruxu.excel; import java.io.File; import java.io.IOException; impo ...
- php 上传 excel xlsx_在PHP中创建和编辑Excel电子表格
要使用纯PHP创建或编辑Excel电子表格,我们将使用PHPExcel库,该库可以读取和写入许多电子表格格式,包括xls,xlsx,ods和csv.在继续之前,请仔细检查服务器上是否装有PHP 5.2 ...
最新文章
- 从 PoS 进化 SPoS:无能耗共识机制
- C#和F#默认接口方法更新
- 什么是机房三维(3D)监控系统,什么是机房可视化动力环境监控系统?
- Redis设计与实现RDB持久化
- 【Error】IDEA报错:org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast t
- 修饰符.lazy .number .trim
- 强推!十大顶级大数据可视化工具 | 程序员硬核评测
- opporeno3pro可以刷鸿蒙系统吗,华为P40放大招!鸿蒙系统+120Hz+徕卡五摄,明年2月发布!...
- document.body.scrollTop值为0的解决方法[转]
- 参加了 InfoQ 的虚拟座谈会
- 计算机人工智能专业大一新生入学前做点什么
- Quantum Espresso安装
- Preferences DataStore全解析
- 二分查找算法python实现_Python实现-二分查找算法(3种方法)
- 分享 | 自定义属于自己的U盘图标
- 收藏!AI从业者必备表情包!
- Oracle最新技术网站
- vanilla_包装Vanilla JavaScript软件包以在React中使用
- LiveRTMP内置IPCamera实现RTMP直播摄像机功能
- 行政服务中心大厅3D导航引导系统建设方案
热门文章
- php 接收传值_PHP在函数体中传递与接收参数
- 服务器维护 文档,ERP系统维护服务器维护管理文档.docx
- flink的watermark简单理解
- android studio 2.2.3 ndk 添加 C 和 C++ 代码
- 物联网核心安全系列——智能门锁安全问题
- VB6 中将数据导出到 Excel 提速之法
- 80后的十三种最深寂寞
- 推特800赞,DeepMind强化学习综述:她可以很快,但快从慢中来
- 工业互联网推动制造业高质量发展研讨会在京召开
- 贾老板大秀未来机器人之舞,场面有点不可描述(动图+视频)