前言
openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者写Excel一种功能。
要对excel进行操作,必须要有能打开excel的软件,这里以wps为例
一.获取wps的安装包并安装
二.excel文档的基本定义
1) 工作薄(workbook):一个EXCEL文件就称为一个工作薄,一个工作薄中可以包含若干张工作表。
2) 工作表(sheet):工作薄中的每一张表格称为工作表,每张工作表都有一个标签,默认为sheet1\sheet2\sheet3来命名,(一个工作 薄默认为由3个工作表组成)
3) 活动表(active sheet):指当前正在操作的工作表
4) 行(row): 工作表中的每一行行首数字(1、2、3、)称为行标题;一张工作表最多有65536行
5) 列(column): 列标题:工作表中每一列列首的字母(A、B、C)称为列标题;一张工作表最多有256列
6)单元格(cell): 工作表的每一个格称为单元格
三.导入openpyxl模块
在pycharm下,执行import openpyxl,发现会报错,这时我们将鼠标放在openpyxl上,按下alt + enter,选择第一个进行安装。
出现下图,说明安装成功。
如果安装失败,就需要到第三方库进行安装。
pip3 install openpyx
四.openpyxl基本用法
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('Book1.xlsx') wb1 = openpyxl.load_workbook('Book2.xlsx') print(wb) print(type(wb)) print(wb1) print(type(wb1))
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信息
运行结果
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信息
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()
import openpyxl wb = openpyxl.load_workbook('Book2.xlsx') ##选择要操作的工作表, 返回工作表对象 sheet = wb['排序商品信息'] for row in sheet.values: print(*row)
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="排序商品信息")
原excel信息
新excel信息
总结
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]