Python3操作文件系列(三):OpenPyXl模块三大对象操作Excel文件



Python3操作文件系列(一):判断文件|目录是否存在三种方式

Python3操作文件系列(二):文件数据读写|二进制数据读写

Python3数据文件读取与写入

Python3操作文件系列(三):excel文件读写数据



复制代码
Python操作Excel的三大对象认知升维:
Excel对象模型:
excel脚本编程的主要内容包括脚本编程和Excel对象模型两大部分。对应脚本语言,它提供了一个叙事和交流的平台。
而对象模型,提供了与应用程序图形用户界面相关的对象,这些对象提供了属性及方法等接口,通过它们,可以用脚本语言向这些对象编程,
从而通过编程控制程序;
Excel图形用户界面中的对话框或界面元素被抽象为Excel对象。在OpenPyXL中:
(1)Excel工作簿被抽象为Workbook对象
(2)工作表被抽象为Worksheet对象
(3)单元格被抽象为Cell对象
这三个对象称为OpenPyXL的三大对象,还有表示图标的Chart对象等。所有Excel对象组合在一起,构成了Excel对象模型;
OpenPyXL的三大对象有着简单的包含关系;工作簿对象包含工作表对象,工作表对象包含单元格对象。所以在使用OpenPyxl进行编程时,Workbook对象,Worksheet对象和
Cell对象有着对应的层级应用关系


一: excel文件创建写入尝鲜

openpyxl操作excel文件,实现数据分析与挖掘与智能化办公|数据可视化直观图等


复制代码
import os
import pathlib

from openpyxl import Workbook

'''
   openpyxl操作excel文件尝鲜
'''
excelPath = os.getcwd()
print("创建操作excel文件对象workbook")
# 创建工作簿
wb = Workbook()
# 创建表单页
ws = wb.create_sheet()
ws['A1'] = '数量'
ws['B1'] = '重量'
ws['C1'] = '长度'
ws.append([10, 200, 30])
ws.append([100, 80, 90])
ws.append([10, 500, 60])
ws.append([20, 400, 80])
ws.append([30, 540, 80])
ws.append([10, 500, 30])
ws.append([50, 600, 10])
ws.append([90, 800, 60])
ws.append([10, 500, 30])
ws.append([50, 600, 10])
ws.append([90, 800, 60])
ws.append([10, 500, 30])
ws.append([50, 600, 10])
ws.append([90, 800, 60])
try:
    path = pathlib.Path(excelPath + "\\data\\test.xlsx")
    print("path是否存在: ", path.exists())
    if path.exists():
        print("如果excel中对应单元格有数据,数据将会被覆盖")
        wb.save(r"" + excelPath + "\\data\\test.xlsx")
        print(
            "------------------也可设置工作簿对象的template属性值为True,可以将当前工作簿保存为模版,模版文件的拓展名为xltx")
        wb.template = True
        wb.save(excelPath + "\\data\\temp.xltx")
    else:
        with open(excelPath + "\\data\\test.xlsx", 'w') as f:
            print("文件创建成功!")
except FileNotFoundError as err:
    print("系统异常: ", err)
finally:
    print("释放资源")
    wb.close()

运行效果:


二: 创建|删除|管理工作表单


复制代码
import os
import pathlib
from openpyxl import load_workbook

'''
   Python操作Excel的三大对象认知升维:
   Excel对象模型:
       excel脚本编程的主要内容包括脚本编程和Excel对象模型两大部分。对应脚本语言,它提供了一个叙事和交流的平台。
       而对象模型,提供了与应用程序图形用户界面相关的对象,这些对象提供了属性及方法等接口,通过它们,可以用脚本语言向这些对象编程,
       从而通过编程控制程序;
   Excel图形用户界面中的对话框或界面元素被抽象为Excel对象。在OpenPyXL中:
   (1)Excel工作簿被抽象为Workbook对象
   (2)工作表被抽象为Worksheet对象
   (3)单元格被抽象为Cell对象
   这三个对象称为OpenPyXL的三大对象,还有表示图标的Chart对象等。所有Excel对象组合在一起,构成了Excel对象模型;
   OpenPyXL的三大对象有着简单的包含关系;工作簿对象包含工作表对象,工作表对象包含单元格对象。所以在使用OpenPyxl进行编程时,Workbook对象,Worksheet对象和
   Cell对象有着对应的层级应用关系
'''

print("使用load_workbook()函数加载已经存在的工作簿文件")
excelPath = os.getcwd()
try:
    path = pathlib.Path(excelPath + "\\data\\test01.xlsx")
    if path.exists():
        print("创建工作簿对象")
        print("通过这种方式创建的workbook没有返回值,使用with语句会报错:")
        print("'Workbook' object does not support the context manager protocol")
        print("绝对路径:", path.absolute())
        wb = load_workbook(path.absolute(), False, True, False, True)
        print("创建工作表对象")
        """
                   title为工作表标题
                   index为该工作表的索引位置,0表示放置最前面
                   当index为负数时,表示从后往前编号,-1表示在倒数第二个位置插入新工作表
        """
        ws = wb.create_sheet(title="国家统计局GDP入表数据", index=0)
        print("表格的标题:%s" % ws.title)
        ws1 = wb.create_sheet(title="MySheet")
        print(ws1.title)
        # 删除工作表单
        del wb[ws1.title]

        ws2 = wb.create_sheet(title="2023年汽车销售量")
        ws3 = wb.create_sheet(title="MySheet3")
        print("管理工作表单")
        print("获取所有的表单对象")
        sheets = wb.worksheets
        for sheet in sheets:
            print("工作簿中表单: ", sheet)
        print()
        print("更改MySheet3的名称为'2022年北京市就业统计'")
        sheets[1].title = '2021年北京市失业人数汇总'
        sheets[3].title = '2022年北京市就业统计'
        for sheet in sheets:
            print("修改后工作簿中表单: ", sheet)
        print("工作簿中有多少个工作表单: %d (张)" % len(sheets))
        # 删除工作表单
        # wb.remove(ws1)
        print("------------------------------------------------")
        print("引用工作表单")
        sheetList = wb.worksheets
        print("通过索引引用工作表单:", sheetList[0].title)
        print("通过索引引用工作表单:", sheetList[1].title)
        print("使用名称引用工作表单:", wb['2023年汽车销售量'])
        print("使用工作簿的get_sheet_by_name()函数引用表单:", wb.get_sheet_by_name(['2021年北京市失业人数汇总']))

        print('-----------------------------------------------------------------------')
        """
           对应不知道表单的名字,可以使用工作簿的sheetnames属性获取所有的工作表单名称
           然后使用表单名称引用表单
        """
        sheetNameList = wb.sheetnames
        for name in sheetNameList:
            print("工作簿中的表单:", name)

    else:
        print(path, ",文件不存在,请手动创建一个")
except Exception as err:
    print("系统异常: ", err)

运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelation.py

使用load_workbook()函数加载已经存在的工作簿文件

创建工作簿对象

通过这种方式创建的workbook没有返回值,使用with语句会报错:

'Workbook' object does not support the context manager protocol

绝对路径: D:\program_file_worker\python_source_work\SSO\grammar\file\excel\data\test01.xlsx

创建工作表对象

表格的标题:国家统计局GDP入表数据

MySheet

管理工作表单

获取所有的表单对象

工作簿中表单: <Worksheet "国家统计局GDP入表数据">

工作簿中表单: <Worksheet "Sheet1">

工作簿中表单: <Worksheet "2023年汽车销售量">

工作簿中表单: <Worksheet "MySheet3">

更改MySheet3的名称为'2022年北京市就业统计'

修改后工作簿中表单: <Worksheet "国家统计局GDP入表数据">

修改后工作簿中表单: <Worksheet "2021年北京市失业人数汇总">

修改后工作簿中表单: <Worksheet "2023年汽车销售量">

修改后工作簿中表单: <Worksheet "2022年北京市就业统计">

工作簿中有多少个工作表单: 4 (张)


引用工作表单

通过索引引用工作表单: 国家统计局GDP入表数据

通过索引引用工作表单: 2021年北京市失业人数汇总

使用名称引用工作表单: <Worksheet "2023年汽车销售量">
系统异常: "Worksheet ['2021年北京市失业人数汇总'] does not exist."
D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelation.py:65: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
print("使用工作簿的get_sheet_by_name()函数引用表单:", wb.get_sheet_by_name(['2021年北京市失业人数汇总']))

Process finished with exit code 0

红色部分报错:

获取工作表时,使用了get_sheet_by_name()方法,或报错:

**解决方案一:****Use wb[sheetname] 及这样取值:**wb['2023年汽车销售量']

解决方案二:

import warnings

warnings.filterwarnings("ignore")


再次运行效果:


复制代码
D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelation.py 
使用load_workbook()函数加载已经存在的工作簿文件
创建工作簿对象
通过这种方式创建的workbook没有返回值,使用with语句会报错:
'Workbook' object does not support the context manager protocol
绝对路径: D:\program_file_worker\python_source_work\SSO\grammar\file\excel\data\test01.xlsx
创建工作表对象
表格的标题:国家统计局GDP入表数据
MySheet
管理工作表单
获取所有的表单对象
工作簿中表单:  <Worksheet "国家统计局GDP入表数据">
工作簿中表单:  <Worksheet "Sheet1">
工作簿中表单:  <Worksheet "2023年汽车销售量">
工作簿中表单:  <Worksheet "MySheet3">

更改MySheet3的名称为'2022年北京市就业统计'
修改后工作簿中表单:  <Worksheet "国家统计局GDP入表数据">
修改后工作簿中表单:  <Worksheet "2021年北京市失业人数汇总">
修改后工作簿中表单:  <Worksheet "2023年汽车销售量">
修改后工作簿中表单:  <Worksheet "2022年北京市就业统计">
工作簿中有多少个工作表单: 4 (张)
------------------------------------------------
引用工作表单
通过索引引用工作表单: 国家统计局GDP入表数据
通过索引引用工作表单: 2021年北京市失业人数汇总
使用名称引用工作表单: <Worksheet "2023年汽车销售量">
使用工作簿的get_sheet_by_name()函数引用表单: <Worksheet "2021年北京市失业人数汇总">
-----------------------------------------------------------------------
工作簿中的表单: 国家统计局GDP入表数据
工作簿中的表单: 2021年北京市失业人数汇总
工作簿中的表单: 2023年汽车销售量
工作簿中的表单: 2022年北京市就业统计

Process finished with exit code 0

三: 添加复制|移动|行列操作


复制代码
import os
import pathlib
from openpyxl import Workbook

'''
   Python操作Excel的三大对象认知升维:
  
'''
workBook = Workbook()
print("使用Workbook对象相应方法操作工作表单")
excelPath = os.getcwd()

try:
    path = pathlib.Path(excelPath + "\\data\\test02.xlsx")
    if path.exists():
        print("激活当前工作表单")
        workSheet = workBook.active
        workSheet.title = '第一个sheet表单'
        # 赋值当前工作表单
        print("赋值工作表单:")
        new_copy_sheet = workBook.copy_worksheet(workSheet)
        new_copy_sheet.title = '第二个sheet表单'
        last_new_copy_sheet = workBook.copy_worksheet(workSheet)
        print('修改表单的名称')
        last_new_copy_sheet.title = '第三个sheet表单'

        print("复制工作表单完成")
        print()
        print('-----------------移动工作表单-------------------------------')
        print(
            "把第一个sheet表单移动到第3个索引位置;move_sheet()offset为整数,则移动向右移动数字的索引位置,如果为负数,则向左一定")
        workBook.move_sheet(workSheet, 3)
        workBook.move_sheet(workSheet, -1)
        print("在表单中新增行|列")
        workSheet.append([10, 20, 30])
        workSheet.append(['老杨', 80, 1023])
        print("添加两行字典")
        workSheet.append({'A': '李广', "B": "徐佳莹", "C": "89"})
        workSheet.append({1: '李广00', 2: "徐佳莹00", 3: "8900"})

        print('---------------------使用循环添加数据------------------------')
        for row in range(1, 100):
            workSheet.append(range(10, 20))
        workBook.save(path)
    else:
        with open(excelPath + "\\data\\test02.xlsx", 'w') as f:
            print("文件创建成功!")
except FileNotFoundError as err:
    print("系统异常: ", err)
finally:
    print("释放资源")
    workBook.close()

运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelationMoveCopyRowColumns.py

使用Workbook对象相应方法操作工作表单

激活当前工作表单

赋值工作表单:

修改表单的名称

复制工作表单完成

-----------------移动工作表单-------------------------------

把第一个sheet表单移动到第3个索引位置;move_sheet()offset为整数,则移动向右移动数字的索引位置,如果为负数,则向左一定

在表单中新增行|列

添加两行字典

释放资源

Process finished with exit code 0

忙着去耍帅,后期补充完整

相关推荐
鹏码纵横2 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
仙人掌_lz2 小时前
Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型
人工智能·python·ai·lora·llm·微调·qwen3
猎人everest2 小时前
快速搭建运行Django第一个应用—投票
后端·python·django
猎人everest2 小时前
Django的HelloWorld程序
开发语言·python·django
chusheng18403 小时前
2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)
windows·python·python3下载·python 安装教程·python3 安装教程
别勉.3 小时前
Python Day50
开发语言·python
xiaohanbao094 小时前
day54 python对抗生成网络
网络·python·深度学习·学习
爬虫程序猿4 小时前
利用 Python 爬虫按关键字搜索 1688 商品
开发语言·爬虫·python
英杰.王4 小时前
深入 Java 泛型:基础应用与实战技巧
java·windows·python
安替-AnTi4 小时前
基于Django的购物系统
python·sql·django·毕设·购物系统