您的位置:首页 > 编程语言 > Python开发

《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 Excel
相关文章推荐