zoukankan      html  css  js  c++  java
  • python应用(九、python操作excel文件:openpyxl)

    9.python操作excel文件:openpyxl
    参考网站:https://www.bilibili.com/video/BV1ys411g7mY?p=24

    9.1 知识点:
    1)数据定义:
    工作簿(excel文件):workbook
    工作表:worksheet
    行:row
    列:column
    单元格:cell

    2)openpyxl中Excel文件三个对象:
    workbook: 工作簿,一个excel文件包含多个sheet。
    sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
    cell: 单元格,存储数据对象
    openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:
    打开Workbook,定位Sheet,操作Cell。

    3)xlrd和xlwt模块(不支持最新版的excel):
    xlrd(读取):xlrd 可以在任意平台上读取的excel为:.xls以及.xlsx;
    xlwt(写入):xlwt支持的excel版本是: Microsoft excel版本 95—2003,也就是 xls文件。
    注意:openpyxl中工作表的行数和列数都是从1开始,不是从0开始

    9.2 安装相关模块并准备数据
    1)安装模块
    pip install openpyxl # 安装openpyxl模块
    2)数据准备

    9.3 操作工作簿(excel文件)
    1)新建工作簿:wb = openpyxl.Workbook()
    新建的工作簿只有一张工作表,表名是"sheet"。
    2)打开文件,并赋值:wb = openpyxl.load_workbook("销售数据.xlsx")
    3)将工作簿保存到文件:wb.save("销售数据11.xlsx")
    保存打开的文件时,最好更换文件名,防止覆盖源文件,导致数据丢失。
    4)代码:

    9.4 操作工作表(sheet)
    1)新建工作表:
    (1)新建自定义工作表:wb.create_sheet(title="工作表名", index=数字)
    index从0开始,0在最前面。
    (2)如果新建默认工作表:wb.create_sheet()
    默认使用"Sheet"加数字命名,位置在所有工作表最后。
    (3)新建表单时,也可以只输入表单名:wb.create_sheet("工作表名")

    2)获取工作表对象
    (1)循环遍历所有工作簿中所有工作表对象:for sheet in 工作簿:
    (2)获取激活工作表对象:工作簿对象.active
    (3)获取指定工作表对象:工作簿对象[“工作表名称”]

    3)获取工作表名称
    (1)工作簿对象.sheetnames:所有工作表名称列表
    (2)工作表对象.title:工作表名称

    4)修改工作表的名称
    工作表对象.title = “新名称”

    5)复制工作表
    工作簿对象.copy_worksheet(被复制工作表对象)
    执行完copy_worksheet,会自动给新工作表命名“原工作表 Copy”

    6)获取工作表行数和列数
    工作表对象.max_row # 获取当前工作表的列数
    工作表对象.max_column # 获取当前工作表的列数

    7)删除工作表
    工作簿对象.remove(表单对象)

    9.5 操作单元格(cell)
    1)获取单元格对象
    (1)根据坐标获取单元格对象
    (2)根据行数和列数获取单元格,行数和列数的取值从1开始,不是从0开始

    2)获取单元格的值、行数、列数、坐标
    单元格的值:单元格对象.value
    单元格的行数:单元格对象.row
    单元格的列数:单元格对象.column
    单元格的坐标:单元格对象.coordinate

    3)通过循环操作行或列

    4)单元格赋值
    (1)使用"="赋值
    ws["A1"] = "Hello Python"
    ws["A2"].value = "你好"
    ws.cell(row=3, column=1).value = "Hello World"


    (2)使用append整行追加赋值



    (3)使用value传参赋值

    9.6 操作行和列
    openpyxl没有行对象和列对象,行和列的操作本质上是操作多个单元格对象
    1)追加整行数据
    工作表对象.append(列表、元组)

    2)获取行数据
    工作表对象[行号]:得到某行所有单元格对象,组成的元组

    循环获取多行数据

    3)获取列数据
    工作表对象["列"]:得到某列所有单元格对象,组成的元组

    循环获取多列数据

    4)按行或按列输出所有单元格对象
    工作表.rows是一个生成器,里面是每一行的数据,一行数据是一个元组,元组由每行所有单元格对象组成
    工作表.columns是一个生成器,里面是每一列的数据,一列数据是一个元组,元组由每列所有单元格对象组成
    rows和columns的用法基本相同,下面以rows为例讲解它们的用法

    使用循环迭代取值

    5)列数转化:字母转数字或数字转字母
    get_column_letter:数字转化成字母
    column_index_from_string:字母转化成数字

    6)删除行和删除列
    工作表对象.delete_rows(行数)
    工作表对象.delete_cols(列数)

    9.7 练习一:修改excel数据
    1)需求:Produce.xlsx中保存了产品的名称和单价,根据字典修改excel文件中的产品价格。

    2)代码:

    9.8 练习二:将excel文件转换成字典
    1)需求:
    将excel中的数据整理成字典,字典格式如下:
    {所属部门1: {区域(省份)1: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
    区域(省份)2: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
    …}
    所属部门2: {区域(省份)1: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
    区域(省份)2: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
    …}

    }

    2)代码:


    3)其它文件中的代码,使用生成的数据文件:

    9.9 修改单元格格式和新建图表
    1)openpyxl提供了单元格格式模块:styles。
    2)openpyxl提供了图表模块:char。
    单元格格式和图表,不涉及到数据处理,而且在excel中操作更简单方便,此处不再讲述,如有需要可以查询相关资料。

  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14304284.html
Copyright © 2011-2022 走看看