Excel是Windows环境下运行的强大的电子表格应用。一个Excel电子表格称为一个工作簿,一个工作簿保存在拓展名为.xlsx的文件中。每个工作簿可以包含多个表(工作表)用户当前查看的表(或者关闭前最后查看的表)称为活动表。每个表都有行(数字表示)和列(字母表示) 第三方模块openpyxl模块让Python程序可以读取和修改Excel,下图列举了其它表格处理的功能矩阵,可以看出openpyxl是全面的,所以我挑选了这个第三方模块作为学习对象。 openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值,这个workbook对象代表这个Excel文件(即工作簿) 工作表之下每个工作表由worksheet对象表示, 获得所有工作表名称的列表 有了Worksheet对象后就可以按名字访问Cell对象(单元格的意思) Worksheet[cell位置].value—————–返回单元格保存的值 在调用表的cell()方法时,row 和column都可以用数字表示,第一行/列的整数是1,不是0 可以通过下面两个函数确定表的大小 字母转数字,调用openpyxl.cell.column_index_from_string()函数 可以将Worksheet对象切片,取得电子表格中一行、一列或一个矩形区域中的所有单元格Cell对象 示例表格 结果– 为什么需要两层循环才能打印所有单元格值? 打印结果 发现元组之下还有三个元组,内部的每个元组表示一行 openpyxl也提供了一些方法写入数据,这就意味着程序可以创建和编辑电子表格文件 这就创建了一个bg的工作簿下面有一个box工作表 创建工作表 create_sheet() 执行结果如下 删除工作表remove_sheet()方法 执行结果 定义单元格字体类型与风格需要导入openpyxl.styles下的Font模块,也就是字体模块,Font可传入字体名称,字体大小,加粗或者斜体 结果如下 公式以一个等号开始,可以配置单元格,让它包含通过其它单元格计算得到的值 结果如下 结果如下 如果我希望取到的都是单元格的值而不是公式则需要将load_workbook()的data_only关键字设置为True 这里的结果我崩了。。。返回了None 求解释 结果如下,由于列宽以字符为默认单位,行高以磅值为默认单位,所以大小不一样 合并单元格:利用merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格 结果如下 拆分单元格:unmerge_cells()工作表方法 每个worksheet对象都有一个freeze_panes属性,可以设置为一个cell对象或者一个单元格坐标的字符串 结果是这样的 openpyxl支持利用工作表中单元格的数据,创建条形图、折线图、散点图和饼图 Reference对象是通过调用openpyxl.charts.Reference()函数并传入 执行结果如下
openpyxl处理Excel表格
安装模块
pip install openpyxl#轻轻松松
读取Excel文档
import openpyxl wb=openpyxl.load_workbook('example.xlsx')
从工作簿中取得工作表
可以用 工作簿变量.get_sheet_by_name() 传入工作表名字符串获得 现在版本用工作簿对象[“工作表名称”]即可import openpyxl wb=openpyxl.load_workbook('example.xlsx') sheet=wb["Sheet1"] 取得Sheet1工作表对象
还可以用get_active_sheet()取得活动工作表对象
worksheet.active 取得活动工作表对象
worksheet.title,title属性 可以获得工作表的名称sheet2=wb.active#取得活动表对象
wb.sheetnames#获得所有工作表名称的列表
从表中取得单元格
Cell对象有一个value属性,一般包含这个单元格中保存的值
Cell对象还有row、column和coordinate属性
Worksheet[cell位置].row——————-返回单元格所在的行
Worksheet[cell位置].column————–返回单元格所在的列
Worksheet[cell位置].coordinate———-返回单元格所在的位置(行+列)sheet.cell(row=1,column=2).value()#这个表示表的B1对象,行1列2 等于sheet['B1']
sheet.get_highest_row()#工作表的行的max值
sheet.get_highest_column()#工作表的列的max值
上面的两个函数以及被删除了,现在获取max值的方式是sheet.max_row sheet.max_column
列字母和数字之间的切换
数字转字母,调用openpyxl.cell.get_column_letter()函数from openpyxl.cell import get_column_letter,column_index_from_string
get_column_letter(1) 'A'
column_index_from_string('A')#从字符串索引 1
import openpyxl wb=openpyxl.load_workbook('example.xlsx') sheet=wb["Sheet1"] for i in sheet['A1':'C3']:#切片 for n in i: print(n.coordinate,n.value) print("---下一行----")
D:recentcodevenvScriptspython.exe D:/recent/code/venv/XKCD.py A1 2015-04-05 13:34:01.999997 B1 Apples C1 73 ---下一行---- A2 2015-04-05 03:41:22.999998 B2 Cherries C2 85 ---下一行---- A3 2015-04-06 12:46:50.999998 B3 Pears C3 14 ---下一行----
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循环获取(<Cell ‘Sheet1’.A1>, <Cell ‘Sheet1’.B1>, <Cell ‘Sheet1’.C1>)等三个元素即第一行
第二个for获取每行下单个单元格对象
写入Excel文档
创建并保存Excel文档
import openpyxl wb=openpyxl.Workbook() sheet=wb.active#获取活动表 sheet.title='box'#工作表重命名 wb.save('bg.xlsx')#保存表格
创建和删除工作表
import openpyxl wb=openpyxl.Workbook() wb.create_sheet()#一般模式:按照sheet1,sheet2,3,4创建 wb.create_sheet() print(wb.sheetnames) wb.create_sheet(index=0,title='dasheet')#高级模式:指定索引位置指定表名创建 print(wb.sheetnames)
D:recentcodevenvScriptspython.exe D:/recent/code/venv/biaoge.py ['Sheet', 'Sheet1', 'Sheet2'] ['dasheet', 'Sheet', 'Sheet1', 'Sheet2']
#...接上面的代码 wb.remove(wb['dasheet']) print(wb.sheetnames)
['Sheet', 'Sheet1', 'Sheet2']
将值写入单元格
#接上面的代码 ws=wb['Sheet'] ws['A1']='hello python ' wb.save('hello.xlsx')
设置单元格字体风格与类型
关键字参数
数据类型
描述
name
字符串
字体名称,比如“微软雅黑”
size
整型
字体大小
bold
布尔型
加粗与否
italic
布尔型
斜体与否
from openpyxl.styles import Font import openpyxl wb=openpyxl.Workbook() wb.create_sheet(index=0,title='Sheet1') ws=wb['Sheet1'] ws['A1']='HELLO PYTHON' ws['A1'].font=Font(size=50,bold=True)#默认字体50号加粗 ws['A2']='HELLO PYTHON' ws['A2'].font=Font(name='微软雅黑',size=50,bold=True)#雅黑50号字加粗 wb.save('style.xlsx')
公式
其实和在表格中输入公式类似
例如下面这个表格shili.xlsx
import openpyxl wb=openpyxl.load_workbook('shili.xlsx') ws=wb['Sheet'] ws['B12']='=SUM(B2:B11)' wb.save('shili-copy.xlsx')
这其实也只是在表格中添加了公式,在表格中内部操作而已,这个时候如果我打印B12的值,那么结果是多少嘞?print(ws['B12'].value)
=SUM(B2:B11)
import openpyxl wb=openpyxl.load_workbook('shili-copy.xlsx',data_only=True) ws=wb['Sheet'] print(ws['B12'].value)
None
调整行和列
设置行高和列宽
import openpyxl wb=openpyxl.Workbook() ws=wb.active ws['A1']='行高' ws['B2']='列宽' ws.row_dimensions[1].height=100#设置行高100,中括号中指定行 ws.column_dimensions['B'].width=100#设置列宽100,中括号中指定列 wb.save('设置行高列宽.xlsx')
合并和拆分单元格
import openpyxl wb=openpyxl.Workbook() ws=wb.active ws['A1']='行高' ws.merge_cells('A1:B3') wb.save('设置行高列宽.xlsx')
merge_cells()的参数是一个字符串表示要合并的矩形区域左上角和右下角的单元格import openpyxl wb=openpyxl.load_workbook('设置行高列宽.xlsx') ws=wb.active #ws['A1']='行高' ws.unmerge_cells('A1:B3')# wb.save('设置行高列宽.xlsx')
冻结窗格
import openpyxl wb=openpyxl.load_workbook('设置行高列宽.xlsx') ws=wb.active #ws['A1']='行高' ws.freeze_panes='B5'#第一行和前四列冻结 wb.save('设置行高列宽.xlsx')
图表
要创建图表,需要做下列事情:
1从一个矩形区域选择的单元格,创建一个Reference对象
2通过传入Reference对象,创建一个Series对象
3创建一个Chart对象,即空白图表
4将Series对象添加到Chart对象,对空白图表添加数据的意思
5可选:设置Chart对象的drowing.top、drowing.left、drowing.width和drowing.height~变量
这四个变量表示了Chart对象距离顶部和左侧的位置(定位)以及Chart对象的长宽大小,即图表的位置和大小
新版本是通过chart.width ,chart.height 对象确定图表大小
通过sheet.add_chart( )函数将Chart对象添加到Worksheet对象并确定图表的位置
6将Chart对象添加到Worksheet对象三 五个参数创建的
参数一:worksheet对象
参数二:两个整数的元组,代表矩形选择区域的左上角单元格
参数三:两个整数的元组,代表矩形选择区域的右下方角单元格
这三个参数划分了图表涵盖的数据
参数二到五:min_col=1, min_row=1, max_col=1, max_row=10分别表示,最小列,最小行,最大列和最大行import openpyxl wb = openpyxl.Workbook() sheet = wb.active # 在不知道表名时,利用active直接打开正在运行的表 # 表的第一列输入一些数据 for i in range(1, 11): sheet['A' + str(i)] = i #上面都是创建表格 reference = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=1, max_row=10)#源数据的区域 series = openpyxl.chart.Series(reference, title='图表标题') chart = openpyxl.chart.BarChart()#生成一个空白柱状图 chart.append(series)#把数据和标题加进来 # 窗口的大小 chart.width = 10 chart.height = 10 sheet.add_chart(chart, 'C2') # 窗口位置 wb.save('图表.xlsx')
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算