Excel 是 Windows 环境下流行的、强大的电子表格应用。openpyxl 模块让 Python 程序能读取和修改 Excel电子表格文件。例如,可能有一个无聊的任务,需要从一个电子表格拷贝一些数据,粘贴到另一个电子表格中。或者可能需要从几千行中挑选几行,根据某种条件稍作修改。或者需要查看几百份部门预算电子表格,寻找其中的赤字。正是这种无聊无脑的电子表格任务,可以通过 Python 来完成。LibreOffice Calc, WPS 和 OpenOffice Calc 都能处理 Excel 的电子表格文件格式,这意味着 openpyxl 模块也能处理来自这些应用程序的电子表格。你可以从https://www.libreoffice.org/和 http://www.openoffice.org/下载这些软件。即使你的计算机上已经安装了 Excel,可能也会发现这些程序更容易使用。
1. Excel的基本定义
- 工作薄(workbook):一个Excel电子表格;
- 工作表(sheet): 每个工作薄里面包含的表, 默认有3个;
- 活动表(active sheet): 用户当前查看的工作表;
- 单元格(cell): 特定的行和列构成的格子;
- 列(column): 列地址是从A开始的;
- 行(row):行地址是从1开始的;
2. 安装 openpyxl 模块
Python 没有自带 openpyxl,所以必须安装
pip3 install openpyxl
- 版本 < 2007使用xlrd模块实现
import xlrd
wb = xlrd.open_workbook(’/tmp/Book1.xls’)
print(wb.sheet_names())
- 版本 > 2007 使用openpyxl
3. 操作
# 1. 导入工作薄
wb = openpyxl.load_workbook('/tmp/Book1.xlsx')
# 如果文件不存在, 自己实例化一个WorkBook的对象;
# wb = openpyxl.Workbook()
# wb.save('book.xlsx')
# 2. 查看包含的工作表
print(wb.sheetnames)
# 3. 查看当前活动表
print(wb.active)
# 4. 从工作薄中选择要操作的工作表
sheet = wb['修改的工作表']
# 5. 查看指定单元格的数据
# cell = sheet['B3']
cell = sheet.cell(row=3, column=2)
# 6. 获取单元格详细信息
print(cell.value)
# 7. 修改单元格信息
cell.value = 1111111
# 8. 获取工作表的总行和总列数
print(sheet.max_column)
print(sheet.max_row)
# 9. 修改单元表的名称
print(sheet.title)
sheet.title = "修改的工作表"
# 10. 遍历历EXCEL表格的所有数据;
print(sheet.rows) # 返回的是一个生成器
# 遍历历每一行
for row in sheet.rows:
# 获取每一行, 每个单元格的数据
for cell in row:
print(cell.value, end='\t')
print('\n')
# 11. 保存修改的信息
wb.save('/tmp/Book1.xlsx')
小例子:将指定的信息保存到新建的excel表格中
print("正在创建excel表格%s......" % (wbname))
# wb = openpyxl.load_workbook(wbname)
# 如果文件不存在, 自己实例化一个WorkBook的对象;
wb = openpyxl.Workbook()
# 获取当前活动工作表的对象
sheet = wb.active
# 修改工作表的名称
sheet.title = sheetname
# 将数据data写入excel表格中;
print("正在写入数据........")
for row, item in enumerate(data): # data发现有4行数据, item里面有三列数据;
for column, cellValue in enumerate(item):
cell = sheet.cell(row=row + 1, column=column + 1, value=cellValue)
# cell = sheet.cell(row=row+1, column=column + 1)
# cell.value = cellValue
wb.save(wbname)
print("保存工作薄%s成功......." % (wbname))
def readwb(wbname, sheetname=None):
# 1. 加载工作薄
wb = openpyxl.load_workbook(filename=wbname)
# 2. 选择操作的工作表
if not sheetname:
sheet = wb.active
else:
sheet = wb[sheetname]
# 读取数据, 存储为python的数据结构
goodsInfo = []
for row in sheet.rows:
rowValues = [cell.value for cell in row]
goodsInfo.append(rowValues)
return goodsInfo
if __name__ == '__main__':
data = [
['书记名称', '数量', '价格'],
['python核心编程', 60, 90],
['Java核心编程', 50, 120],
['Php核心编程', 100, 80],
]
print("1. " + "*" * 50)
create_to_excel('doc/excel01.xlsx', data, '书籍信息统计')
goodsInfo = readwb('doc/excel01.xlsx', '书籍信息统计')
# print(goodsInfo)
print("2. " + "*" * 50)
numSortInfo = [goodsInfo[0]]+ sorted(goodsInfo[1:], key=lambda x: x[1])
print(numSortInfo)
create_to_excel('doc/sorted_by_num.xlsx', numSortInfo, '书籍信息统计按照数量排序')
print("3. " + "*" * 50)
# 按照商品价格进行排序 sorted()
priceSortInfo = [goodsInfo[0]] + sorted(goodsInfo[1:], key=lambda x: x[1])
print(priceSortInfo)
create_to_excel('doc/sorted_by_price.xlsx', numSortInfo, '书籍信息统计按照价格排序')