1.创建对象

打开或者创建一个Excel需要创建一个Workbook对象

获取一个表则需要先创建一个Workbook对象,然后使用该对象的方法来得到一个Worksheet对象

如果要获取表中的数据,那么得到Worksheet对象以后再从中获取代表单元格的Cell对象

Workbook对象

  一个Workbook对象代表一个Excel文档,因此在操作Excel之前,都应该先创建一个Workbook对象。对于创建一个新的Excel文档,直接进行Workbook类的调用即可,对于一个已经存在的Excel文档,可以使用openpyxl模块的load_workbook函数进行读取,该函数包涵多个参数,但只有filename参数为必传参数。filename 是一个文件名,也可以是一个打开的文件对象

import openpyxl

wb = openpyxl.Workbook('111.xlsx')
wb1 = openpyxl.load_workbook('111.xlsx')

print(wb)
print(type(wb))
print(wb1)
print(type(wb1))

输出结果:

<openpyxl.workbook.workbook.Workbook object at 0x000001AFEA7AC898>
<class 'openpyxl.workbook.workbook.Workbook'>
<openpyxl.workbook.workbook.Workbook object at 0x000001AFFDC81438>
<class 'openpyxl.workbook.workbook.Workbook'>

2.Workbook对象属性(工作簿操作)

sheetnames:获取工作簿中的表(列表)

active:获取当前活跃的Worksheet

worksheets:以列表的形式返回所有的Worksheet(表格)

read_only:判断是否以read_only模式打开Excel文档

encoding:获取文档的字符集编码

properties:获取文档的元数据,如标题,创建者,创建日期等

import openpyxl
 
wb = openpyxl.load_workbook('Book2.xlsx')
print(wb.sheetnames)
print(wb.active)
print(wb.worksheets)
print(wb.read_only)
print(wb.encoding)
print(wb.properties) ##运行结果最后三行属于该属性

 excel信息:

python中的openpyxl模块_python中的openpyxl模块

3.Worksheet,Cell对象(工作表操作,单元格)

 

Worksheet:

title:表格的标题

max_row:表格的最大行

min_row:表格的最小行

max_column:表格的最大列

min_column:表格的最小列

rows:按行获取单元格(Cell对象) - 生成器

columns:按列获取单元格(Cell对象) - 生成器

values:按行获取表格的内容(数据) - 生成器

Cell:

row:单元格所在的行

column:单元格坐在的列

value:单元格的值

coordinate:单元格的坐标

 

import openpyxl
 
wb = openpyxl.load_workbook('Book2.xlsx')
##选择要操作的工作表, 返回工作表对象
sheet = wb['排序商品信息']
#获取工作表的名称
print(sheet.title)
# 获取工作表中行和列的最值
print(sheet.max_column)
print(sheet.max_row)
print(sheet.min_column)
print(sheet.min_row)
##修改表的名称
sheet.title = 'sheet1'
print(sheet.title)
# 返回指定行指定列的单元格信息
print(sheet.cell(row=1, column=2).value)
cell = sheet['B1']
print(cell)
print(cell.row, cell.column, cell.value,cell.coordinate)

运行前excel信息

python中的openpyxl模块_python_02

python中的openpyxl模块_信息保存_03

 

4.访问单元格的所有信息

 

import openpyxl
 
wb = openpyxl.load_workbook('Book2.xlsx')
##选择要操作的工作表, 返回工作表对象
sheet = wb['排序商品信息']
for row in sheet.rows:
 # 循环遍历每一个单元格
 for cell in row:
 # 获取单元格的内容
 print(cell.value, end=',')
 print()

 

python中的openpyxl模块_openpyxl_04

import openpyxl
 
wb = openpyxl.load_workbook('Book2.xlsx')
##选择要操作的工作表, 返回工作表对象
sheet = wb['排序商品信息']
for row in sheet.values:
 print(*row)

 

python中的openpyxl模块_python中的openpyxl模块_05

5.应用案例

 

需求:

商品名称 商品价格 商品数量

- 定义一个函数, readwb(wbname, sheetname=None)

- 如果用户指定sheetname就打开用户指定的工作表, 如果没有指定, 打开active sheet;

- 根据商品的价格进行排序(由小到大), 保存到文件中;商品名称:商品价格:商品数量

- 所有信息, 并将其保存到数据库中;

import os
 
import openpyxl
 
 
def readwb(wbname, sheetname=None):
 # 打开工作薄
 wb = openpyxl.load_workbook(wbname)
 # 获取要操作的工作表
 if not sheetname:
  sheet = wb.active
 else:
  sheet = wb[sheetname]
 
 # 获取商品信息保存到列表中
 #[ ['name', price, count]
 #
 # ]
 all_info = []
 for row in sheet.rows:
  child = [cell.value for cell in row]
  all_info.append(child)
 return sorted(all_info, key=lambda item: item[1])
 
 
def save_to_excel(data, wbname, sheetname='sheet1'):
 """
 将信息保存到excel表中;
 [[' BOOK', 50, 3], ['APPLE', 100, 1], ['BANANA', 200, 0.5]]
 """
 print("写入Excel[%s]中......." %(wbname))
 # 打开excel表, 如果文件不存在, 自己实例化一个WorkBook对象
 wb = openpyxl.Workbook()
 # 修改当前工作表的名称
 sheet = wb.active
 # 修改工作表的名称
 sheet.title = sheetname
 
 for row, item in enumerate(data): # 0 [' BOOK', 50, 3]
  for column, cellValue in enumerate(item): # 0 ' BOOK'
   sheet.cell(row=row+1, column=column+1, value=cellValue)
 
 # ** 往单元格写入内容
 # sheet.cell['B1'].value = "value"
 # sheet.cell(row=1, column=2, value="value")
 
 # 保存写入的信息
 wb.save(filename=wbname)
 print("写入成功!")
 
data = readwb(wbname='Book1.xlsx')
save_to_excel(data, wbname='Book2.xlsx', sheetname="排序商品信息")