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
 

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


http://www.niftyadmin.cn/n/5075482.html

相关文章

一文图解Golang管道Channel

在 Go 语言发布之前&#xff0c;很少有语言从底层为并发原语提供支持。大多数语言还是支持共享和内存访问同步到 CSP 的消息传递方法。Go 语言算是最早将 CSP 原则纳入其核心的语言之一。内存访问同步的方式并不是不好&#xff0c;只是在高并发的场景下有时候难以正确的使用&am…

江苏服务器有哪些特点

江苏服务器具有以下特点&#xff1a; 高性能&#xff1a;江苏服务器采用高性能的处理器和大内存&#xff0c;能够快速、流畅地处理网络请求和数据&#xff0c;确保网络的高效运行。高防性&#xff1a;江苏服务器通常具有高防性&#xff0c;能够抵御各种DDoS攻击和CC攻击&#…

mysql字段类型与oracle字段类型对应关系

MySQL与Oracle两种数据库在工作中&#xff0c;都是用的比较多的数据库&#xff0c;由于MySQL与Oracle在数据类型上有部分差异&#xff0c;在我们迁移数据库时&#xff0c;会遇上一定的麻烦&#xff0c;下面介绍MySQL与Oracle数据库数据类型的对应关系。 一、常见数据类型在MyS…

【Golang】包

包 Go语言是使用包来组织源代码的&#xff0c;包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案 Go语言中为我们提供了很多内置包&#xff0c;如 fmt、os、io 等。 任何源代码文件必须属于某个包&#xff0c;同时源码文件的第一…

化妆品用乙基己基甘油全球市场总体规模2023-2029

乙基己基甘油又名辛氧基甘油&#xff0c;分子式 C11H24O3&#xff0c;分子量 204.306&#xff0c;沸点 325℃&#xff0c;密度 0.962&#xff0c;无色液体&#xff0c;涂抹性能适中的润肤剂、保湿剂及润湿剂。它能够在提高配方滋润效果的同时又具有柔滑的肤感。加入在某些膏霜体…

一般香港服务器带宽选多大够用?(带宽计算方法)

​  在海外IDC市场份额中&#xff0c;香港服务器依托自身优越的服务器资源条件&#xff0c;在各个行业中发挥的重要作用。但是&#xff0c;不同业务对网络带宽的要求各不相同&#xff0c;弄清楚如何计算带宽需求对于确保业务平稳运行至关重要&#xff0c;最好从一开始就使用正…

NAT+ACL+mstp小综合

三、实验一相关知识点 1&#xff0c;实验&#xff1a;NAT 综合实验 2&#xff0c;拓扑&#xff1a; 3&#xff0c;需求: 1&#xff09;&#xff0c;实现VLAN20 的除了20这台主机以外所有主机上网访问外网 2&#xff09;&#xff0c;实现VLAN30 的主机为奇数电脑上网 3&#…

【Node.js】module 模块化

认识 node.js Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;可以用来编写服务器后端的应用程序。基于Chrome V8 引擎封装&#xff0c;但是没有 DOM 和 BOM。Node.js 没有图形化界面。node -v 检查是否安装成功。node index.js 执行该文…