• 技术学习:Python(10)|操作Excel



    活动地址:CSDN21天学习挑战赛

    🏮1 前言

    加入社区,更好的体验学习氛围:六月暴雪飞梨花

    🎈1.1 什么是Excel

    Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。

    🎈1.2 Excel优点以及功能

    • 直观的界面
    • 出色的计算功能和图表工具

    Excel最大的功能点是成为了个人计算机数据处理软件。当然他也有很多竞争对手,如:

    • Google文档
    • AceyOffice
    • Ability Spreadsheet
    • EditGrid
    • Framework
    • Lotus 1-2-3
    • Gnumeric
    • KSpread
    • OpenOffice.org Calc
    • Origin
    • Quattro Pro
    • The Cruncher(for MacIntosh)
    • VisiCalc
    • WPS表格
    • LibreOffice

    🎈1.3 应用场景

    1. Excel中的透视表
    • 可以快速选择求和、计数、平均值、最大值等等;
    • Excel中的公式、函数非常强大,可以帮助我们完成很多数据整理工作
    1. 表格控件
    • 数据库中数据的呈现和编辑;
    • 数据录入界面;
    • 数据交换(如与Excel交换数据);
    • 数据报表及分发
    1. 进行数据分析

    2. 数据统计分析

    例如网站某日统计流量的的均值、区间,以及给出该专题访问量差异的量化标准,借此来作为分析每天访问量的价值、参差不齐、此起彼伏一个衡量的依据。要求得到均值、区间、众数、方差、标准差等统计数据

    1. 图表
    • 柱形图,折线图,散点图
    • 条形图、圆柱图、圆锥图、棱锥图等
    • 饼图,圆环图,雷达图
    • 气泡图
    • 其他图
    1. 化工和MATLAB

    化工中经常用到的Origin和数学中常见的MATLAB

    1. 其他

    等等

    🎈1.4 Python中的三方库

    • 介绍

    老师博文中,给出了七种三方库的对比,然后又给出了两个三方库的详细介绍。今天也跟着老师的步伐,来学习下这两个Excel库xlrdxlwt 。关于这两个库,我们可以在官方提供的库里面搜索看下大体情况:
    xlrdhttps://pypi.org/search/?q=xlrd&o=
    xlwthttps://pypi.org/search/?q=xlwt&o=

    • 安装
    Aion.Liu $ pip install xlrd
    Collecting xlrd
      Downloading xlrd-2.0.1-py2.py3-none-any.whl (96 kB)
         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.5/96.5 kB 18.1 kB/s eta 0:00:00
    Installing collected packages: xlrd
    Successfully installed xlrd-2.0.1
    Aion.Liu $ pip install xlwt
    Collecting xlwt
      Downloading xlwt-1.3.0-py2.py3-none-any.whl (99 kB)
         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0/100.0 kB 11.9 kB/s eta 0:00:00
    Installing collected packages: xlwt
    Successfully installed xlwt-1.3.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    🏮2 创建表格&写入数据

    实验代码如下:

    >>> import xlwt
    >>> # 创建一个表格
    >>> xlwt.Workbook(encoding = "utf8")
    <xlwt.Workbook.Workbook object at 0x105c190f0>
    >>> # 设置表格编码
    >>> workbook = xlwt.Workbook(encoding = "utf8")
    >>> # 增加sheet页
    >>> worksheet = workbook.add_sheet('python_study_users')
    >>> # 将数据写入指定单元格
    >>> worksheet.write(0,  0, "python")
    >>> 
    >>> worksheet.write(0,  1, "张三")
    >>>
    >>> worksheet.write(0,  3, "男")
    >>> # 保存数据到文件
    >>> workbook.save("python_users.xls")
    >>>
    >>> exit()
    
    # 查看已经生成的文件
    Aion.Liu $ ll
    total 16
    drwxr-xr-x   3 Aion.Liu  staff    96  8 10 22:09 ./
    drwxr-xr-x  10 Aion.Liu  staff   320  8 10 21:59 ../
    -rw-r--r--   1 Aion.Liu  staff  5632  8 10 22:09 python_users.xls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述
    🔑 根据上一节课程学习的循环遍历的案例,可以自己先想一下,如何实现一个多行数据的写入?

    🏮3 修改表格样式

    当然,我们有些时候并不能满足于简单的数据写入,用户在使用时会有一些特殊要求,或者标题有特殊的高度以及宽度的要求,或者标题颜色、字体、样式等。下面是我从老师这里学习到的如何设置表格的高度以及宽度以及样式。

    实验代代码如下老师博文

    def body_style():
        # 一、创建一个样式对象,初始化样式 style
        style = xlwt.XFStyle()  # Create Style对象
    
        # 二、字体风格设置
        font = xlwt.Font()  # Create Font对象
        font.name = "SimSun"  # 设置字体类型,宋体
        font.colour_index = 4  # 设置字体颜色
        font.height = 20 * 12  # 字体大小,12为字号,20为衡量单位
        font.bont = True  # 设置字体加粗
        font.underline = True  # 下划线
        font.italic = True  # 斜体字
    
        # 二、背景设置
        pattern = xlwt.Pattern()
        pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
        pattern.pattern_fore_colour = 4  # 给背景颜色赋值
    
        # 三、边框设置
        borders = xlwt.Borders()  # 创建边框对象,    # .DASHED:虚线;.NO_LINE:没有
        # 上下左右都添加边框
        borders.left = 1
        borders.right = 1
        borders.top = 1
        borders.bottom = 1
        # 设置边框颜色
        borders.left_colour = 2
        borders.right_colour = 2
        borders.top_colour = 2
        borders.bottom_colour = 2
    
        # 四、位置设置
        alignment = xlwt.Alignment()
        alignment.horz = 1  # 设置水平位置,0是左对齐,1是居中,2是右对齐
        alignment.wrap = 1  # 设置自动换行
    
        # 五、设置好之后,全部都加到style上
        style.alignment = alignment
        style.font = font
        style.borders = borders
        return style
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    🏮4 读取表格

    🎈4.1 选项

    实验代码,我会把一些常用的异常也都打印出来,希望其他学习同学也尝试一下,举一反三。下面是我的实验代码:

    >>> import xlrd
    >>> # 打开文件
    >>> workbook = xlrd.open_workbook("./python_users.xls")
    >>> print(workbook)
    <xlrd.book.Book object at 0x10867db40>
    >>> # 打印所有的sheet页
    >>> print(workbook.sheet_names())
    ['python_study_users']
    >>> # 根据索引号,打印所有的sheet页
    >>> print(workbook.sheet_by_index(0))
    Sheet  0:<python_study_users>
    >>> # 根据索引号,打印所有的sheet页(我打印一个Excel中没有的索引号)
    >>> print(workbook.sheet_by_index(1))
    Traceback (most recent call last):
      File "", line 1, in <module>
      File "/usr/local/lib/python3.10/site-packages/xlrd/book.py", line 450, in sheet_by_index
        return self._sheet_list[sheetx] or self.get_sheet(sheetx)
    IndexError: list index out of range
    >>> # 根据sheet页名称,打印所有的sheet页
    >>> print(workbook.sheet_by_name("python_study_users"))
    Sheet  0:<python_study_users>
    >>> # 根据sheet页名称,打印所有的sheet页(我打印一个Excel中没有的sheet名称)
    >>> print(workbook.sheet_by_name("python_study_users2"))
    Traceback (most recent call last):
      File "/usr/local/lib/python3.10/site-packages/xlrd/book.py", line 466, in sheet_by_name
        sheetx = self._sheet_names.index(sheet_name)
    ValueError: 'python_study_users2' is not in list
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "", line 1, in <module>
      File "/usr/local/lib/python3.10/site-packages/xlrd/book.py", line 468, in sheet_by_name
        raise XLRDError('No sheet named <%r>' % sheet_name)
    xlrd.biffh.XLRDError: No sheet named <'python_study_users2'>
    >>>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    🎈4.2 操作sheet页|行

    # 1.获取sheet表总函数:sheet.nrows
    print("总行数为:", sheet_1.nrows)
    # 2.返回由该行中所有的单元格对象组成的列表,列表内是键值对: sheet.row(1)
    print(sheet_1.row(1))
    # 或者sheet.row_slice(1)
    print(sheet_1.row_slice(1))
    # 3.返回指定行的所有单元格数值组成的列表: sheet.row_values(rowx, start_colx=0, end_colx=None)
    print(sheet_1.row_values(1))
    # 4.返回指定行的有效长度:sheet.row_len(rowx)
    print("返回指定行的有效长度:", sheet_1.row_len(1))
    
    print('-' * 20)
    # 5. 读取整个表
    for i in range(sheet_1.nrows):
        print(sheet_1.row_values(i))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行结果如下:

    总行数为: 4
    [text:'物品1', empty:'', number:100.0, text:'EUR 0.1', text:'EUR 0.1']
    [text:'物品1', empty:'', number:100.0, text:'EUR 0.1', text:'EUR 0.1']
    ['物品1', '', 100.0, 'EUR 0.1', 'EUR 0.1']
    返回指定行的有效长度: 5
    --------------------
    ['item', 'b', 'PCS', 'UNIT', 'TOTAL']
    ['物品1', '', 100.0, 'EUR 0.1', 'EUR 0.1']
    ['物品2', '', 100.0, 'EUR 0.1', 'EUR 0.1']
    ['物品3', '', 200.0, 'EUR 0.2', 'EUR 0.2']
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    🎈4.3 操作sheet页|列

    # 1. 返回指定sheet表的有效列数:sheet.ncols
    print("总列数为:", sheet_1.ncols)
    # 2. 返回由该列中所有的单元格对象组成的列表,列表内是键值对:sheet.col(1)
    print(sheet_1.col(1))
    # 或者sheet.col_slice(1)
    print(sheet_1.col_slice(1))
    # 3. 返回指定列的所有单元格数值组成的列表:sheet.col_values(colx, start_colx=0, end_colx=None)
    print(sheet_1.col_values(0))  # 带列名
    print(sheet_1.col_values(0, 1))  # 不带列名
    print('-' * 20)
    
    # 4. 读取全部表
    for i in range(sheet_1.ncols):
        print(sheet_1.col_values(i))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行结果如下:

    总列数为: 5
    [text:'b', empty:'', empty:'', empty:'']
    [text:'b', empty:'', empty:'', empty:'']
    ['item', '物品1', '物品2', '物品3']
    ['物品1', '物品2', '物品3']
    --------------------
    ['item', '物品1', '物品2', '物品3']
    ['b', '', '', '']
    ['PCS', 100.0, 100.0, 200.0]
    ['UNIT', 'EUR 0.1', 'EUR 0.1', 'EUR 0.2']
    ['TOTAL', 'EUR 0.1', 'EUR 0.1', 'EUR 0.2']
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    🏮5 其他

    暂无。

  • 相关阅读:
    如何在linux下检测(自身)IP冲突
    【虹科干货】Redis Enterprise vs ElastiCache——如何选择缓存解决方案?
    基于SpringBoot+Vue的旅游系统、前后端分离
    2.11-CSS基础--伪类和伪元素
    Springboot整合shiro安全框架+swagger
    直播是未来互联网创业者必备的素质之一?
    Python爬取小说(requests和BeautifulSoup)
    强网杯2022 pwn 赛题解析——yakacmp
    python基础
    循环双链表的操作
  • 原文地址:https://blog.csdn.net/L_Lycos/article/details/126274793