Excel文档与python
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): 每个工作簿可以包含多个表, 如: sheet1, sheet2等
活动表(active sheet): 用户当前查看的表
列(column): 列地址是从 A 开始的
行(row): 行地址是从 1 开始的
单元格(cell): 特定行和列的方格
2. 安装 openpyxl 模块
Python 没有自带 openpyxl,所以必须安装。
pip3 install openpyxl
3. 对Excel 文档的基本操作
import openpyxl
# 1. 导入工作簿
wb = openpyxl.load_workbook('/tmp/Book1.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 =111
print(cell.value)
# 8.获取工作表的总行数和总列数
print(sheet.max_row)
print(sheet.max_column)
# 9.修改工作表名称
print(sheet.title)
sheet.title = '修改的工作表'
print(sheet.title)
# 10.遍历Excel表格的所有数据
print(sheet.rows) # 返回的是一个生成器
# 遍历历每一行
for row in sheet.rows:
# 获取每一行, 每个单元格的数据
for cell in row:
print(cell.value, end='\t')
print('')
# 11.保存修改的信息
wb.save('/tmp/Book1.xlsx')
4. 表格的读写操作
import openpyxl
def create_to_excel(wbname,data,sheetname='Sheet1'):
"""
将指定信息保存到新建的excel表格中
:param wbname:
:param data: 往excel中存储的数据
:param sheetname:
:return:
"""
print('正在创建eccel表格%s......' %(wbname))
# wb = openpyxl.load_workbook(wbname)
# 如果文件不存在,自己实例化一个Workbook的对象
wb = openpyxl.Workbook()
# 获取当前活动工作表对象
sheet = wb.active
# 将数据data写入excel表格中
sheet.title = sheetname
print('正在写入数据......')
for row,item in enumerate(data):
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):
# 加载工作簿
wb = openpyxl.load_workbook(wbname)
# 选择操作的工作表
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','100'],
['Php核心编程','100','80']
]
create_to_excel('doc/excel01.xlsx',data,'书籍信息统计')
GoodsInfo = readwb('doc/excel01.xlsx','书籍信息统计')
# print(GoodsInfo)
# 按照商品数量进行排序
numSortInfo = [GoodsInfo[0]] + sorted(GoodsInfo[1:],key=lambda x:x[1])
create_to_excel('doc/sorted_by_num.xlsx',numSortInfo,'书籍信息统计按照数量排序')
# 按照商品单价进行排序
priceSortInfo = [GoodsInfo[0]] + sorted(GoodsInfo[1:],key=lambda x:x[2])
create_to_excel('doc/sorted_by_price.xlsx',priceSortInfo,'书籍信息统计按照单价排序')
按照商品数量进行排序:
按照商品单价进行排序: