Python与Excel

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')

Python与Excel_第1张图片

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,'书籍信息统计按照单价排序')

Python与Excel_第2张图片
Python与Excel_第3张图片
按照商品数量进行排序:
Python与Excel_第4张图片
按照商品单价进行排序:
Python与Excel_第5张图片

你可能感兴趣的:(Python与Excel)