在进行操作前,我们先熟悉一下excel表格的基本术语:
- 工作簿:workbook。包含多个工作表的。
- 表单:worksheet。指一个工作簿里面的每个表单。
- 行:row
- 列:column
- 单元格:cell
这里我们使用openpyxl读取数据。
查看工作簿/工作表的内容
1 2 3 4 5 6
| import openpyxl
wb = openpyxl.load_workbook('examble.xlsx')
print(wb.sheetnames)
|
也可以通过循环的形式打开工作表
1 2 3 4 5 6 7
| import openpyxl
wb = openpyxl.load_workbook('examble.xlsx')
for sheet in wb: print(sheet.title)
|
假如要想增加工作表,可以通过下面的程序实现
1 2 3 4 5 6 7 8 9
| import openpyxl
wb = openpyxl.load_workbook('examble.xlsx')
Mysheet = wb.create_sheet("保育猪成本") Mysheet2 = wb.create_sheet("育肥猪成本")
print(wb.sheetnames)
|
读取某个单元格内容
1 2 3 4 5 6 7 8 9 10 11
| import openpyxl
wb = openpyxl.load_workbook('examble.xlsx')
ws = wb.active
print(ws['A1'])
print(ws['A1'].value)
|
上面的程序未表示出行列坐标,如果想表示“第X行X列是X”,使用下面方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import openpyxl
wb = openpyxl.load_workbook('examble.xlsx')
ws = wb.active
c = ws['A1']
print('row {} column {} is {}'.format(c.row, c.column, c.value))
print(ws.cell(row=1, column=3).value)
for i in range(1,8): print(ws.cell(row=i, column=3).value)
|
遍历某行或者某列的内容
通过下面的程序可以读取工作表中第五列的所有内容
1 2 3 4 5 6 7 8 9
| mport openpyxl
wb = openpyxl.load_workbook('examble.xlsx') ws = wb.get_sheet_by_name("原始数据")
for i in range(5, ws.max_row+1): name = ws.cell(row=i, column=5).value
print(name)
|
总结:
1 2 3 4
| [1] import openyxl [2] wb = openpyxl.load_wookbook("文件名") [3] ws = wb.active or ws = wb.get_sheet_by_name(sheettitle) [4] ws = ['A1'] or ws.cell(row=3, column=2)
|
新工作表的创建及保存
工作表和工作簿的创建比较简单。
1 2 3 4 5 6 7 8 9 10 11
| import openpyxl
ws = openpyxl.Workbook() sheet = ws.active
sheet.title = "first"
ws.save("examble2.xlsx")
|
当然也可以在原有文件的基础上创建工作表,注意最后保存文件时,使用另外一个名字,防止覆盖原文件的内容。
如果想要创建新的工作表,则使用create_sheet(index=0, title='名称')
,index代表表单的位置,title表示表单的名称,如果不填写表单的名称,会默认为sheet。
1 2 3 4 5 6 7 8 9 10 11
| import openpyxl
ws = openpyxl.Wookbook()
sheet = ws.active
ws.create_sheet(index=3, title='second')
ws.save("examble2.xlsx")
|
表单的删除使用如下程序
1
| ws.remove_sheet(wb.get_sheet_by_name('second'))
|
向单元格写内容
最简单的是手工往里面填,这个用得少
1
| sheet['A1'] = "填写单元格的内容"
|
向单元格批量填写如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
ws = wb.create_sheet("First")
for row in range(1,1000): ws.append(range(1, 100, 2))
wb.save("excamble5.xlsx")
|
单元格内容的批量改写
基本方法是使用for循环对单元格进行遍历,当查找到需要改写的内容时,直接改写
遍历的程序如下:
1 2 3 4 5 6 7 8 9 10
| import openpyxl
wb = openpyxl.load_workbook('examble.xlsx') ws = wb.get_sheet_by_name("原始数据")
for i in range(5, ws.max_row+1): name = ws.cell(row=i, column=5).value
print(name)
|
参考资料
用Python处理Excel数据,中文全基础系列教程
用Python处理Excel数据,中文全基础系列教程
openpyxl官方文档