Python之Excel操作

一 excel文档说明

Excel 是 Windows 环境下流行的、强大的电子表格应用。openpyxl 模块让 Python 程序能读取和修改 Excel电子表格文件。

1. Excel文档基本定义
  • 工作薄(workbook):一个 Excel 电子表格文档
  • 工作表(sheet):每个工作簿可以包含多个表, 如: sheet1, sheet2等;
  • 活动表(active sheet):用户当前查看的表;
  • 行(row): 1,2,3,4,5,6…行地址是从 1 开始的
  • 列(column): A,B,C,D…列地址是从 A 开始的;
  • 单元格(cell): B1, C1…特定行和列的方格;
2. 安装 openpyxl 模块

Python 没有自带openpyxl,所以必须安装

pip3 install openpyxl
3. Excel 文档格式

openpyxl只支持较新版本的Excle格式,即’’.xlsx’’, ‘’.xlsm’’, ‘’.xltx’’, ‘’.xltm’’;
建立一个Excel表格:以“.xlsx“结尾
在这里插入图片描述

4. openpyxl模块的使用
import openpyxl
#1.打开一个excel文档
wb=openpyxl.load_workbook('Book1.xlsx') #加载工作薄
#print(wb,type(wb))
#获取当前工作簿里的所有工作表和正在使用的表
print(wb.sheetnames)
print(wb.active)
#2.选择要操作的工作表,返回工作表对象
sheet=wb['Sheet1']
#获取工作表名称
print(sheet.title)
#3.返回指定行指定列的单元格信息
print(sheet.cell(row=1,column=2).value)
cell=sheet['B1']
print(cell)
print(cell.row,cell.column,cell.value)
#4.获取工作表中行和列的最大值
print(sheet.max_column)
print(sheet.max_row)
sheet.title='书籍信息'
print(sheet.title)
#5.访问单元格所有信息
print(sheet.rows)	#返回一个生成器,包含文件的每一行内容,可以通过遍历访问.
#循环遍历每一行
for row in sheet.rows:
    #循环遍历每一个单元格
    for cell in row:
        #获取单元格内容
        print(cell.value,end=',')
    print()
#6.保存修改信息
wb.save(filename='Book1.xlsx')

在这里插入图片描述
在这里插入图片描述
class 'openpyxl.workbook.workbook.Workbook’实例化出来的对象

二 excel表内容的排序

需求:
商品名称    商品价格    商品数量

定义一个函数, readwb(wbname, sheetname=None)
如果用户指定sheetname就打开用户指定的工作表,如果没有指定,打开active sheet;
根据商品的价格进行排序(由小到大), 保存到文件中;商品名称:商品价格:商品数量
所有信息, 并将其保存到数据库中;

import openpyxl
def readwb(wbname,sheetname=None):
    #打开工作簿
    wb=openpyxl.load_workbook(wbname)
    #获取要操作的工作表
    if not sheetname:
        sheet=wb.active
    else:
        sheet=wb[sheetname]
    #获取商品信息保存到列表中
    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中
    print('写入Excel[%s]中...' %(wbname))
    #打开excel表,如果文件不存在,自己实例化一个Workbook对象
    wb=openpyxl.Workbook()
    #修改当前工作表名称
    sheet=wb.active
    #修改工作表名称
    sheet.title=sheetname

    for row,item in enumerate(data):
        for column,cellValue in enumerate(item):
            sheet.cell(row=row+1,column=column+1,value=cellValue)
    #保存写入的信息
    wb.save(filename=wbname)
    print('写入成功')
data=readwb(wbname='Book1.xlsx')
save_to_excel(data,wbname='Book2.xlsx',sheetname='排序商品信息')

需求:

每一行代表一次单独的销售。列分别是销售产品的类型(A)、产品每磅的价格(B),销售的磅数(C),以及这次销售的总收入。
TOTAL 列设置为 Excel 公式,将每磅的成本乘以销售的磅数,并将结果取整分。
有了这个公式,如果列 B 或 C 发生变化,TOTAL 列中的单元格将自动更新.

需要更新的价格如下:
Celery 1.19
Garlic 3.07
Lemon 1.27

现在假设 Garlic、 Celery 和 Lemons 的价格输入的不正确。
这让你面对一项无聊的任务:遍历这个电子表格中的几千行,更新所有 garlic、celery 和 lemon 行中每磅的价格。
你不能简单地对价格查找替换,因为可能有其他的产品价格一样,你不希望错误地“更正”。对于几千行数据,手工操作可能要几小时。

import openpyxl
def readwb(wbname, sheetname=None):
    # 打开工作薄
    wb = openpyxl.load_workbook(wbname)
    # 获取要操作的工作表
    if not sheetname:
        sheet = wb.active
    else:
        sheet = wb[sheetname]
    # 获取商品信息保存到列表中
    all_info = []
    for row in sheet.rows:
        child = [cell.value for cell in row]
        all_info.append(child)
        if child[0] == 'Celery':
            child[1] = 1.19
        if child[0] == 'Garlic':
            child[1] = 3.07
        if child[0] == 'Lemon':
            child[1] = 1.27
    return all_info

def save_to_excel(data, wbname, sheetname='sheet1'):
    """
    将信息保存到excel表中;
    """
    print("写入Excel[%s]中......." % (wbname))
    # 打开excel表, 如果文件不存在, 自己实例化一个WorkBook对象
    wb = openpyxl.Workbook()
    # 修改当前工作表的名称
    sheet = wb.active
    # 修改工作表的名称
    sheet.title = sheetname

    for row, item in enumerate(data):
        for column, cellValue in enumerate(item):
            sheet.cell(row=row + 1, column=column + 1, value=cellValue)
    # 保存写入的信息
    wb.save(filename=wbname)
    print("写入成功!")

data = readwb(wbname='/home/kiosk/Desktop/produceSales.xlsx')
save_to_excel(data, wbname='new_Sales.xlsx', sheetname="商品信息")

在这里插入图片描述
写入成功后会出现新表格:
在这里插入图片描述
修改之前:
在这里插入图片描述
修改之后:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值