Hello!大家好,我是小赵。
最近经常在朋友圈看到一则广告:让自己学会Python后,成了同事眼中的大神,于是我耐不住好奇心,粗略地学习了用Python处理Excel,现在把它写出来,希望你们喜欢。(此图片仅说明学习动机,无其他任何用途)


从工作簿中取得工作表:
openpyxl.load_workbook() 函数接收文件名,返回一个 workbook 数据类型的值。这个workbook对象代表这个Excel文件。
sheetnames 方法可以取得工作薄中所有表名的列表。
通过 worksheet对象[‘表名字符串’] 可以工作薄中的一个指定工作表。
worksheet对象.active 可以取得工作簿的活动表。
import openpyxl# 用openpyxl模块打开Excel文档wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'># 从工作簿中取得工作表#print(wb.sheetnames) # ['Sheet1', 'Sheet2', 'Sheet3']sheet = wb['Sheet1']print(sheet) # <Worksheet "Sheet1"> 通过表名取得表格anotherSheet = wb.activeprint(anotherSheet) # <Worksheet "Sheet3"> 活动表,即工作薄在Excel打开时出现的工作表
从表中取得单元格:
有了 worksheet 对象之后,就可以按名字访问 Cell 对象。
value 属性:单元格中保存的值
row、column 和 coordinate 属性提供保存该单元格的位置信息。
row:行
column:列
coordinate:行和列
利用 cell() 方法,传入整数作为 row 和 column 关键字参数,也可以得到一个单元格。
import openpyxl# 用openpyxl模块打开Excel文档wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'># 从表中取得单元格sheet2 = wb['Sheet3']print(sheet2['A1'].value) # 4/5/2015 1:34:02 PMc = sheet2['B1']print(c.value) # Applesprint('Row' + str(c.row) + ',Column ' + str(c.column) + ' is ' + c.value)# Row1,Column 2 is Applesprint('Cell ' + c.coordinate + ' is ' + c.value)# Cell B1 is Apples# cell()方法print(sheet2.cell(row=1, column=2).value) # Applesfor i in range(1, 8, 2):print(i, sheet2.cell(row=i, column=2).value)'''得到第1,3,5行的第二列1 Apples3 Pears5 Apples7 Strawberries'''
列字母和数字之间的转换:
Excel 表格用字母来指定列,A~Z,在 Z 之后,列开始用两个字母,AA、AB、AC,要想知道 AA 是第几列,就要将列字母转换为列数字;要想知道27列的列字母是什么,就要将列数字转换为列字母。
首先引入模块:from openpyxl.utils import get_column_letter, column_index_from_string调用get_column_letter()函数将字母转换成数字。调用column_index_from_string()将数字转换成字母。
程序如下:
import openpyxlfrom openpyxl.utils import get_column_letter, column_index_from_string# 用openpyxl模块打开Excel文档wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')# 调用函数使列字母和列数字之间相互转换print(get_column_letter(27)) # AAprint(get_column_letter(900)) # AHPprint(column_index_from_string('AA')) # 27
从表中取得行和列:
可以将 worksheet 对象切片,取得电子表格中的一行、一列或一个矩形区域中的所有 Cell 对象。然后可以循环遍历这个切片中的所有单元格。
import openpyxl# 用openpyxl模块打开Excel文档wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'>sheet = wb['Sheet3']print(tuple(sheet['A1':'C3']))'''运行结果:((<Cell 'Sheet3'.A1>, <Cell 'Sheet3'.B1>, <Cell 'Sheet3'.C1>), (<Cell 'Sheet3'.A2>, <Cell 'Sheet3'.B2>, <Cell 'Sheet3'.C2>), (<Cell 'Sheet3'.A3>, <Cell 'Sheet3'.B3>, <Cell 'Sheet3'.C3>))'''for rowOfCellObjects in sheet['A1':'C3']:for cellObj in rowOfCellObjects:print(cellObj.coordinate, cellObj.value)print("---END OF ROW---")'''运行结果:A1 4/5/2015 1:34:02 PMB1 ApplesC1 73---END OF ROW---A2 4/5/2015 3:41:23 AMB2 CherriesC2 85---END OF ROW---A3 4/6/2015 12:46:51 PMB3 PearsC3 14---END OF ROW---'''
在这里我们指定了要从 A1 到 C3 的矩形区域中的Cell对象,为了看得更清楚,在一个元组中列出这些 Cell 对象。这个元组包含三个元组,每个元组代表一行,这三个元组包含指定区域中一行的 Cell 对象。
要打印这个区域中所有单元格的值,使用两个 for 循环,外层循环遍历每一行,内层循环遍历每一行中的每个单元格。

创建并保存Excel文档:
创建新文件:先调用 openpyxl.Workbook() 函数创建空的 workbook 对象,写入数据后,保存,到指定目录下就可以找到这个新的 Excel 文件。
import openpyxl# 创建空的 workbook 对象wb = openpyxl.Workbook()print(wb.sheetnames) # ['Sheet']sheet = wb.active# 写入数据sheet['A1'] = 12sheet['A2'] = 13# 保存文件wb.save('D:\\PythonCodes\\example.xlsx')
修改文件:先调用 openpyxl.load_workbook() 函数读入文件,修改其中某些内容,另存为一个文件,到指定目录下即可找到该文件以及比对修改的信息。
import openpyxl# 读取 Excel 文件wb = openpyxl.load_workbook('D:\\PythonCodes\\example.xlsx')# 修改该 Excel 文件的工作表名称sheet = wb.activesheet.title = 'new_Sheet'# 将修改保存wb.save('D:\\PythonCodes\\example_copy.xlsx')
创建和删除工作表:
利用 create_sheet() 方法创建新的工作表,利用 remove(工作表)或 del 工作表名[sheetname] 删除工作表。
import openpyxl# 创建新文件# 创建空的 workbook 对象wb = openpyxl.Workbook()print(wb.sheetnames) # ['Sheet']sheet = wb.active# 写入数据sheet['A1'] = 12sheet['A2'] = 13# 创建一个新的工作表wb.create_sheet('Sheet1')print(wb.sheetnames) # ['Sheet', 'Sheet1']# 创建工作表,并利用 index 和 title 关键字参数,指定新工作表的索引和名称wb.create_sheet(index=0, title='First Sheet')wb.create_sheet(index=2, title='Third Sheet')print(wb.sheetnames) # ['First Sheet', 'Sheet', 'Third Sheet', 'Sheet1']# 删除工作表# del wb['Third Sheet'] 或者wb.remove(wb['Third Sheet'])print(wb.sheetnames) # ['First Sheet', 'Sheet', 'Sheet1']
先写到这里吧!虽说只是粗略的学了一点,但是对于某些情况用Python处理Excel的确会方便很多,比如数模题的十万行数据.....
持续关注,精彩不驻!

你的在看,是我创作的最大动力!




