《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第12章 处理Excel电子表格】
2018-03-12 22:09
1221 查看
1. Excel 文档
让我们来看一些基本的定义:一个Excel电子表格文档称为一个工作簿。一个工作簿保存在扩展名为.xlsx 的文件中。每个工作簿可以包含多个表(也称为工作表)。用户当前查看的表(或关闭Excel 前最后查看的表或Excel 在打开时出现的表),称为活动表。
2. 安装 openpyxl 模块
openpyxl属于第三方模块,使用前必须先安装。在http://openpyxl.readthedocs.io/en/stable/shang上可以查看openpyxl的完整文档。3. 读取 Excel 文档
1) 用 openpyxl 模块打开 Excel 文档
openpyxl.load_workbook()函数接受一个excel文件,返回Workbook类型的值(Workbook对象)。Workbook对象代表这个Excel文件。示例:>>> import openpyxl>>> wb =openpyxl.load_workbook('D:\\Tool\\PycharmProjects\\chapter12\\example.xlsx')
>>> type(wb)
<class'openpyxl.workbook.workbook.Workbook'>
2) 从工作簿中取得工作表
使用Workbook对象的.sheetnames属性可以获得工作簿中所有表名的列表。使用 Workbook 对象的用.active属性,取得工作簿的活动表
通过向Workbook对象的web[sheetname]传入一个表的名字得到一个Worksheet对象,表示任一工作表。通过Worksheet对象的title属性可以取得工作表的名称。示例:>>>importopenpyxl
>>>wb =openpyxl.load_workbook('D:\\Tool\\PycharmProjects\\chapter12\\example.xlsx')
>>>wb.sheetnames
['Sheet1','Sheet2', 'Sheet3']
>>>sheet = wb['Sheet3']
>>>sheet
<Worksheet"Sheet3">
>>>type(sheet)
<class'openpyxl.worksheet.worksheet.Worksheet'>
>>>sheet.title
'Sheet3'
>>>anotherSheet = wb.active
>>>anotherSheet
<Worksheet"Sheet1">
3) 从表中取得单元格
有了WorkSheet对象之后,可以按名字访问Cell(单元格)对象。>>>import openpyxl>>> wb= openpyxl.load_ _workbook('example.xlsx')
>>>sheet = wb.get_ _sheet_ _by_ _name('Sheet1')
>>>sheet['A1']
<CellSheet1.A1>
>>>sheet['A1'].value
datetime.datetime(2015,4, 5, 13, 34, 2)
>>> c =sheet['B1']
>>>c.value
'Apples'
>>>'Row ' + str(c.row) + ', Column ' + c.column + ' is ' + c.value
'Row 1, Column Bis Apples'
>>>'Cell ' + c.coordinate + ' is ' + c.value
'Cell B1 isApples'
>>>sheet['C1'].value
73Cell对象有一个value属性获取单元格的值。Cell 对象也有 row、column 和 coordinate属性,提供该单元格的位置信息。
在调用表的 cell()方法时,可以传入整数作为 row 和 column 关键字参数,也可以得到一个单元格。示例:>>>import openpyxl
>>> wb= openpyxl.load_workbook('D:\\Tool\\PycharmProjects\\chapter12\\example.xlsx')
>>>sheet = wb['Sheet1']
>>>sheet['A1']
<Cell'Sheet1'.A1>
>>>sheet['A1'].value
datetime.datetime(2015,4, 5, 13, 34, 2)
>>> c =sheet['B1']
>>>c.value
'Apples'
>>>c.row
1
>>>c.column
'B'
>>>c.coordinate
'B1'
>>>sheet.cell(row = 2,column = 2)
<Cell'Sheet1'.B2>
>>>sheet.cell(row = 2,column = 2).value
'Cherries'Worksheet对象的max_row和max_column分别获得表的最大行数和最大列数。示例:>>>import openpyxl
>>> wb= openpyxl.load_workbook('D:\\Tool\\PycharmProjects\\chapter12\\example.xlsx')
>>>sheet = wb['Sheet1']
>>>sheet.max_row
7
>>>sheet.max_column
3
4) 列字母和数字之间的转换
使用openpyxl.utis模块的get_column_letter()实现数字到字母的转换,column_index_from_string()实现字母到数字的转换。>>> from openpyxl.utils importget_column_letter, column_index_from_string>>> get_column_letter(1)
'A'
>>> get_column_letter(16384)
'XFD'
>>> wb =openpyxl.load_workbook('D:\Tool\PycharmProjects\chapter12\example.xlsx')
>>> sheet = wb['Sheet1']
>>>get_column_letter(sheet.max_column)
'C'
>>> column_index_from_string('A')
1
5) 从表中取得行和列
可以将 Worksheet 对象切片,取得电子表格中一行、一列或一个矩形区域中的所有Cell 对象。然后可以循环遍历这个切片中的所有单元格。示例:>>> wb= openpyxl.load_workbook('D:\Tool\PycharmProjects\chapter12\example.xlsx')>>>sheet = wb['Sheet1']
tuple(sheet['A1':'C3'])
((<Cell Sheet1.A1>,<Cell Sheet1.B1>, <Cell Sheet1.C1>), (<Cell Sheet1.A2>,
<CellSheet1.B2>, <Cell Sheet1.C2>), (<Cell Sheet1.A3>, <CellSheet1.B3>,
<CellSheet1.C3>))
>>>for rowOfCellObjects in sheet['A1':'C3']:
for cellObj inrowOfCellObjects:
print(cellObj.coordinate,cellObj.value)
print('--- ENDOF ROW ---')
4. 写入 Excel 文档
1) 创建并保存 Excel 文档(工作簿)
使用openpyxl.Workbook()函数创建一个新的workbook对象。最后调用workbook对象的save()方法保存excel文档。示例:>>> import openpyxl>>> wb = openpyxl.Workbook()
>>> wb.sheetnames
['Sheet']
>>> sheet = wb.active
>>> sheet.title
'Sheet'
>>> sheet.title = 'spam'
>>> wb.save('exapmle_copy.xlsx')对于save()方法:如果已有相同名字的表格存在并且表格关闭,那么会将之前的表格替换。如果同名表格没有关闭,那么将会报PermissionError异常,拒绝保存表格。
2) 创建和删除工作表
利用workbook对象的create_sheet() 和wb.remove(worksheet) / delwb[sheetname]方法,可以在工作簿中添加或删除工作表。示例:>>>import openpyxl>>>wb = openpyxl.Workbook()
>>>wb.sheetnames
['Sheet']
>>>wb.create_sheet()
<Worksheet"Sheet1">
>>>wb.sheetnames
['Sheet','Sheet1']
>>>wb.create_sheet(index = 0, title = 'First Sheet')
<Worksheet"First Sheet">
>>>wb.sheetnames
['First Sheet','Sheet', 'Sheet1']
>>>wb.create_sheet(index = 2,title = 'Middle Sheet')
<Worksheet"Middle Sheet">
>>>wb.sheetnames
['First Sheet','Sheet', 'Middle Sheet', 'Sheet1']
>>> delwb['First Sheet']在工作簿中添加或删除工作表之后,记得调用 save()方法来保存变更。
3) 将值写入单元格
将值写入单元格,很像将值写入字典中的键。示例:>>> import openpyxl>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_ _sheet_ _by__name('Sheet')
>>> sheet['A1'] = 'Hello world!'
>>> sheet['A1'].value
'Hello world!'
5. 设置单元格的字体风格
定义单元格的字体风格,需要从 openpyxl.styles 模块导入 Font。import openpyxl from openpyxl.styles import Font, NamedStyle wb = openpyxl.Workbook() sheet = wb['Sheet'] italic24Font = Font(size=24, italic=True) sheet['A1'].font = italic24Font sheet['A1'] = 'Hello world!' wb.save('styled.xlsx')
6. Font 对象
Font()函数可能的关键4000
字参数:
7. 公式
公式以一个等号开始,可以配置单元格,让它包含通过其他单元格计算得到的值。示例:>>> import openpyxl>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_ _active__sheet()
>>> sheet['A1'] = 200
>>> sheet['A2'] = 300
>>> sheet['A3'] = '=SUM(A1:A2)'
>>> wb.save('writeFormula.xlsx')再读取文件的时候,A3的值为=SUM(A1:A2)。如果要显示计算结果,必须将 load_workbook()的 data_only 关键字参数设置为 True。
8. 调整行和列
1) 设置行高和列宽
Worksheet 对象有row_dimensions 和 column_dimensions 属性,控制行高和列宽。示例:>>> import openpyxl>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_ _active__sheet()
>>> sheet['A1'] = 'Tall row'
>>> sheet['B2'] = 'Wide column'
>>> sheet.row__dimensions[1].height = 70
>>> sheet.column__dimensions['B'].width = 20
>>> wb.save('dimensions.xlsx')如代码所示,在row_dimensions 中,可以用行的编号来访问一个对象(在这个例子中,是1 或)。在column_dimensions 中,可以用列的字母来访问一个对象(在这个例子中,是A或B)。
行的高度可以设置为 0 到 409 之间的整数或浮点值。这个值表示高度的点数。一点等于 1/72 英寸。默认的行高是 12.75。列宽可以设置为 0到255 之间的整数或浮点数。这个值表示使用默认字体大小时(11 点),单元格可以显示的字符数。默认的列宽是8.43 个字符。列宽为零或行高为零,将使单元格隐藏。
2) 合并和拆分单元格
利用 merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格。示例:>>> import openpyxl>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_ _active__sheet()
>>> sheet.merge_ _cells('A1:D3')
>>> sheet['A1'] = 'Twelve cellsmerged together.'
>>> sheet.merge_ _cells('C5:D5')
>>> sheet['C5'] = 'Two mergedcells.'
>>> wb.save('merged.xlsx')要拆分单元格,就调用 unmerge_cells()工作表方法。示例:>>> import openpyxl
>>> wb = openpyxl.load__workbook('merged.xlsx')
>>> sheet = wb.get_ _active__sheet()
>>> sheet.unmerge_ _cells('A1:D3')
>>> sheet.unmerge_ _cells('C5:D5')
>>> wb.save('merged.xlsx')
3) 冻结窗口
在 OpenPyXL 中,每个 Worksheet 对象都有一个 freeze_panes属性,可以设置为一个Cell 对象或一个单元格坐标的字符串。请注意,单元格上边的所有行和左边的所有列都会冻结,但单元格所在的行和列不会冻结。要解冻所有的单元格,就将 freeze_panes 设置为 None 或'A1'。示例:>>> import openpyxl
>>> wb = openpyxl.load_ _workbook('produceSales.xlsx')
>>> sheet = wb.get_ _active_ _sheet()
>>> sheet.freeze_ _panes = 'A2'
>>> wb.save('freezeExample.xlsx')
4) 图表
openpyxl 支持利用工作表中单元格的数据,创建条形图、折线图、散点图和饼图。要创建图表,需要做下列事情:
1.从一个矩形区域选择的单元格,创建一个 Reference 对象。
2.通过传入 Reference 对象,创建一个 Series 对象。
3.创建一个 Chart 对象。
4.将 Series 对象添加到 Chart 对象。
5.可选地设置Chart对象的drawing.top、drawing.left、drawing.width和drawing.height
变量。
6.将 Chart 对象添加到 Worksheet 对象。
Reference 对象需要一些解释。Reference对象是通过调用openpyxl.charts. Reference()
函数并传入 3 个参数创建的:
1.包含图表数据的 Worksheet对象。
2.两个整数的元组,代表矩形选择区域的左上角单元格,该区域包含图表数
据:元组中第一个整数是行,第二个整数是列。请注意第一行是 1,不是 0。
3.两个整数的元组,代表矩形选择区域的右下角单元格,该区域包含图表数
据:元组中第一个整数是行,第二个整数是列
相关文章推荐
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第14章 处理CSV文件和JSON数据】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第13章 处理PDF和Word文档(1)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第13章 处理PDF和Word文档(2)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第5章 字典和结构化数据】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第2章 控制流】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第10章 调试】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第1章 Python基础】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第16章 发送电子邮件和短信(2)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第8章 读写文件】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第16章 发送电子邮件和短信(1)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第11章 从Web抓取信息】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第6章 字符串操作】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记序
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第15章 保持时间,计划任务和启动程序】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第3章 函数】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第18章 用 GUI 自动化控制键盘和鼠标】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第9章 组织文件】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第4章 列表】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第7章 模式匹配与正则表达式(2)】
- Python编程快速上手—让繁琐工作自动化 PDF中文高清晰完整版+源码