python编程学习——第七周

第七周

python学习笔记和做的一些习题 (python编程快速上手——让繁琐工作自动化

第十二章 处理Excel电子表格

要安装openpyxl模块

读取Excel文档

建立一个excel表格
在这里插入图片描述

用openpyxl模块打开Excel文档:openpyxl.load_workbook()函数接受文件名,返回一个 workbook 数据类型的值。
在这里插入图片描述

从工作簿中取得工作表

调用 get_sheet_names()方法可以取得工作簿中所有表名的列表。
在这里插入图片描述
出现了错误提醒,修改后发现取得活动表get_active_sheet()方法在模块中不存在:
在这里插入图片描述
修改后:
在这里插入图片描述

从表中取得单元格

在这里插入图片描述
发现是在拼接c.column时,因为不是字符串形式拼接错误,修改后:
在这里插入图片描述
Cell 对象有一个 value 属性,不出意外,它包含这个单元格中保存的值。Cell 对象也有 row、column 和 coordinate 属性,提供该单元格的位置信息。这里,访问单元格 B1 的 Cell 对象的 value 属性,我们得到字符串’Apples’。row属性给出的是整数 1,column 属性给出的是’B’,coordinate 属性给出的是’B1’。
用字母来指定列,这在程序中可能有点奇怪,特别是在 Z 列之后,列开时使用两个字母:AA、AB、AC 等。作为替代,在调用表的 cell()方法时,可以传入整数作为 row 和 column 关键字参数,也可以得到一个单元格。第一行或第一列的整数是 1,不是 0。
在这里插入图片描述
可以使用表的cell()方法,传入row和column的参数,便可以得到对应行和列的单元格的对象。
可以通过 Worksheet 对象的 get_highest_row()和 get_highest_column()方法获取最大行和最大列,确定表的大小。但是显示出错:
在这里插入图片描述
查资料后了解到get_highest_row()和get_highest_column()在openpyxl模块中已经不存在了,代替它们的是max_row和max_column两个方法。
在这里插入图片描述
还有一个没有解决的问题:它的结果是错误的,但是我还没有找到更好的解决方法

列数字和数字之间的转换

要从字母转换到数字,就调用 openpyxl.cell.column_index_from_string()函数;要从数字转换到字母,就调用 openpyxl.cell.get_column_letter()函数。
在这里插入图片描述
这个错误的意思就是导入 get_column_letter方法失败,get_column_letter方法已经在Openpyxl 的3版本中重写了,如今想要用此方法需要从openpyxl.utils中导入,而非从openpyxl.cell。
在这里插入图片描述
在这里插入图片描述
调用函数get_column_letter()传入一个整数,我们可以知道对应这一列的字母是什么;函数 column_index_string()做的事情相反:传入一列的字母名称,它告诉你该列的数字是什么。注意:要使用这些函数,不必加载一个工作簿。

从表中取得行和列

可以将 Worksheet 对象切片,取得电子表格中一行、一列或一个矩形区域中的所有Cell 对象。然后可以循环遍历这个切片中的所有单元格。
使用tuple()方法,在一个元组中列出Cell对象:
在这里插入图片描述
运用佛如循环,打印出A1到C3这个区域中所有单元格的值:
在这里插入图片描述
要访问特定行或列的单元格值,也可以利用worksheet队形的rows和columns属性,利用 Worksheet 对象的 rows 属性,可以得到一个元组构成的元组。内部的每个元组都代表 1 行,包含该行中的 Cell 对象。columns 属性也会给你一个元组构成的元组,内部的每个元组都包含 1 列中的 Cell 对象:
在这里插入图片描述
出错原因:
在参考了https://blog.csdn.net/Marry_Ma/article/details/98878430了解到因为sheet.columns是生成器类型,不能使用索引,所以需要转换成list之后再使用索引,正确的写法是:
在这里插入图片描述
这里的行数依然是19,,,,,

写入Excel文档
创建并保存Excel文档:

调用openpyxl.Workbook()函数,创建一个新的空Workbook对象:
在这里插入图片描述
先将工作表命名为sheet,然后将新的字符串保存在它的title属性中,从而改变工作表的名字。
当修改Workbook 对象或它的工作表和单元格时,电子表格文件不会保存,除非你调用 save()工作簿方法。这里,我们改变了工作表的名称。为了保存变更,我们将文件名作为字符串传递给 save()方法。传入的文件名与最初的文件名不同,例如’example_copy.xlsx’,这将变更保存到电子表格的一份拷贝中。
在这里插入图片描述
在这里插入图片描述
这样如果变更后的数据又出错的情况,我们还有原始数据可以处理。

创建和删除工作表:

利用 create_sheet() and remove_sheet() remove()方法,可以在工作簿中添加或删除工作表。
添加工作表:
在这里插入图片描述
create_sheet()方法返回一个新的 Worksheet 对象,名为 SheetX,它默认是工作簿的最后一个工作表。或者,可以利用 index 和 title 关键字参数,指定新工作表的索引或名称。
在这里插入图片描述
删除工作表:
在这里插入图片描述
从上面可以看出运用remove_sheet()方法,会有提示:可以用wb.remove(worksheet) or del wb[sheetname]这两种方法删除工作表,之后在执行del wb[‘Middle Sheet’]时,发现Middle Sheet工作表已经不存在,所以remove_sheet()可以用,但是会有警告,为了避免警告,可以用它提示的方法来删除工作表。
在这里插入图片描述

将值写入单元格

将值写入单元格,很像将值写入字典中的键。如果你有单元格坐标的字符串,可以像字典的键一样,将它用于 Worksheet 对象,指定要写入的单元格。
在这里插入图片描述

设置单元格的字体风格

为了定义单元格的字体风格,需要从 openpyxl.styles 模块导入 Font()和 Style()函数。
在这里插入图片描述
参考https://blog.csdn.net/weixin_41569319/article/details/80807006

#将A1单元格设置为24点、斜体
from openpyxl.styles import Font
wb = openpyxl.Workbook()
sheet = wb['Sheet']
italic24Font = Font(size = 24, italic = True)
sheet['A1'].font = italic24Font
sheet['A1'] = 'Hello world!'
wb.save('styled.xlsx')
Font对象

Font 对象的 style 属性影响文本在单元格中的显示方式。要设置字体风格属性,就向 Font()函数传入关键字参数。
Font style 属性的关键字参数:

关键字参数数据类型描述
name字符串字体名称
size整型大小点数
bold布尔型True表示粗体
italic布尔型True表示斜体
公式

在单元格中使用公式就像填写其他单元格一样:
在这里插入图片描述
也可以读取单元格中的公式,就像其他值一样。但是,如果你希望看到该公式的计算结果,而不是原来的公式,就必须将 load_workbook()的 data_only 关键字参数设置为 True。这意味着 Workbook 对象要么显示公式,要么显示公式的结果,不能兼得(但是针对一个电子表格文件,可以加载多个Workbook 对象)。
在这里插入图片描述
在这里插入图片描述
这个的A3的值没有显示出来,加了一个print():
在这里插入图片描述
结果为None,不在命令窗口,新建wb.py:

import openpyxl
wb_data_only=openpyxl.load_workbook('E://writeFormula.xlsx',data_only=True)
sheet = wb_data_only.active
print(sheet['A3'].value)

输出结果正常,显示为公式的结果,而不是公式:
在这里插入图片描述

调整行和列
设置行高和列宽

Worksheet 对象有 row_dimensions 和column_dimensions 属性,控制行高和列宽。
在这里插入图片描述
打开E盘的dimensions.xlsx,可以看到第一行行高和第二列列宽的改变,我们要注意的是在表格中,行的编号是数字,而列的编号是字母:
在这里插入图片描述
行的高度可以设置为 0 到 409 之间的整数或浮点值。这个值表示高度的点数。一点等于 1/72 英寸。默认的行高是 12.75。列宽可以设置为 0 到255 之间的整数或浮点数。这个值表示使用默认字体大小时(11 点),单元格可以显 示的字符数。默认的列宽是 8.43 个字符。列宽为零或行高为零,将使单元格隐藏。

合并和拆分单元格

merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格。
在这里插入图片描述
打开E盘的merged.xlsx,可以看到A1:D3单元格合并起来,C5:D5单元格也被合并起来:
在这里插入图片描述
拆分单元格:unmerge_cells()工作表方法:
在这里插入图片描述
打开E盘的merged.xlsx,可以看到之前合并的单元格都已经拆分成原来的样子了:
在这里插入图片描述

冻结窗格

在 OpenPyXL 中,每个 Worksheet 对象都有一个freeze_panes 属性,可以设置为一个 Cell 对象或一个单元格坐标的字符串。请注意,单元格上边的所 有行和左边的所有列都会冻结,但单元格所在的行和列不会冻结。
冻结窗格的例子:

freeze_panes的设置冻结的行和列
sheet.freeze_panes = ‘A2’行1
sheet.freeze_panes = ‘B1’列A
sheet.freeze_panes = ‘C1’列A和列B
sheet.freeze_panes = ‘C2’行1和列A和列B
sheet.freeze_panes = ‘A1’或’None’没有冻结窗格
图表

如果用书上的代码,就会出现错误提示: AttributeError: module ‘openpyxl’ has no attribute ‘charts’。
参考:https://blog.csdn.net/weixin_41569319/article/details/80821715
修改后可得到:

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
#A列的一些数据填写
for i in range(1,11):
    sheet['A' + str(i)] = i
#从一个矩形区域选择的单元格,创建一个 Reference 对象
refObj = openpyxl.chart.Reference(sheet,min_row = 1 , min_col = 1 , max_row = 10 , max_col = 1)
#通过传入 Reference 对象,创建一个 Series 对象。 
seriesObj = openpyxl.chart.Series(refObj, title='First series') 
#创建一个 Chart 对象
#调用 openpyxl.charts.BarChart()创建一个条形图
chartObj = openpyxl.chart.BarChart()
#将 Series 对象添加到 Chart 对象
chartObj.append(seriesObj)
#将 Chart 对象添加到 Worksheet 对象
sheet.add_chart(chartObj,'C5')
wb.save('E://sampleChart.xlsx') 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值