码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python自动化之Excel利器openpyxl


    文章目录

    • 前言
    • 一、Workbook
      • 1.1 读取xlsx文件
      • 1.2 保存
    • 二、Sheet
      • 2.1 创建Sheet
      • 2.2 遍历Sheet
      • 2.3 移动Sheet
      • 2.4 删除Sheet
      • 2.5 插入、删除行列
    • 三、单元格
      • 3.1 获取某个单元格
      • 3.2 遍历单元格
      • 3.3 获取范围单元格
      • 3.4 单元格赋值
      • 3.5 合并/解除合并单元格
      • 3.6 单元格数据格式
      • 3.7 单元格数字格式
    • 四、样式
      • 4.1 字体
      • 4.2 填充
      • 4.3 边框
      • 4.4 对齐
      • 4.5 内建样式
    • 参考

    前言

    OpenPyXL_Logo

    openpyxl 是一个 用于读写Excel 2010 xlsx/xlsm/xltx/xltm 文件的Python库,最初是基于PHPExcel。

    可以通过pip安装

    pip install openpyxl
    
    • 1

    官方文档:https://openpyxl.readthedocs.io/en/stable/

    源码地址:https://foss.heptapod.net/openpyxl/openpyxl

    一、Workbook

    1.1 读取xlsx文件

    通过 load_workbook加载文件

    def load_workbook(filename, read_only=False, keep_vba=KEEP_VBA,
                      data_only=False, keep_links=True):
    
    • 1
    • 2
    • filename:一般为 xlsx 文件名
    • read_only:只读,不能编辑
    • keep_vba:保留VBA内容,当设为True时要保存为xlsm格式,xlsx不能保存VBA代码
    • data_only:当为True时,公式内容被读取时是公式计算出来的值,而不是公式
    • keep_links:保留链接
    import openpyxl
    
    wb = openpyxl.load_workbook("示例.xlsx")
    valueWb = openpyxl.load_workbook("示例.xlsx", data_only = True)
    
    • 1
    • 2
    • 3
    • 4

    1.2 保存

    wb.save('修改后.xlsx')
    
    • 1

    二、Sheet

    2.1 创建Sheet

    names = ['Sheet', 'Sheet1', 'Sheet2']
    for n in names:
    	wb.create_sheet(n)
        
    # 创建Sheet,插入第一个位置
    wb.create_sheet('Sheet3', 0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2 遍历Sheet

    # 单个Sheet
    ws = wb['Sheet']
    ws = wb[0]
    # 所有Sheet
    wb.worksheets
    # 所有Sheet名字
    wb.sheetnames
    # 遍历所有Sheet
    for sheet in wb:
        print(sheet)
    # Sheet标题
    ws.title
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.3 移动Sheet

    ws=wb['Sheet2']
    wb.move_sheet(ws, -1)
    
    • 1
    • 2

    2.4 删除Sheet

    ws=wb['Sheet1']
    wb.remove(ws)
    
    del wb['Sheet']
    
    • 1
    • 2
    • 3
    • 4

    2.5 插入、删除行列

    # 在第1行前插入2行
    ws.insert_rows(1, 2)
    # 在第1列前插入2列
    ws.insert_cols(1, 2)
    
    # 增加一行
    ws.append([1, 2, 3])
    
    # 从第6行开始,往下删除3行
    ws.delete_rows(6, 3)
    # 删除第6列
    ws.delete_cols(6)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    三、单元格

    3.1 获取某个单元格

    cell = ws[A1]
    ws.cell(row=1, column=1)
    
    # 获取单元格值
    cell.value
    
    # 获取单元格坐标A1
    cell.coordinate
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.2 遍历单元格

    # 按行遍历
    for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
        for cell in row:
            print(cell)
    
    # 按列遍历
    for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
         for cell in col:
             print(cell)
             
    # 遍历范围单元格
    cellRange=ws['A1:B3']
    for row in cellRange:
        for cell in row:
            print(cell.value)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.3 获取范围单元格

    # 范围单元格
    cellRange=ws['A1:B3']
    
    # 单元格行
    a=ws[1]
    b=ws[5:10]
    
    # 单元格列
    c=ws['A']
    d=ws['C:D']
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.4 单元格赋值

    ws['A1'] = 12
    
    ws.cell(row=1, column=1, value = 12)
    
    • 1
    • 2
    • 3

    3.5 合并/解除合并单元格

    ws.merge_cells('A2:D2')
    ws.unmerge_cells('A2:D2')
    
    ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
    ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.6 单元格数据格式

    cell.data_type
    
    • 1
    • b 布尔值,bool
    • e 错误字符串,error_string (‘#NULL!’, ‘#DIV/0!’, ‘#VALUE!’, ‘#REF!’, ‘#NAME?’, ‘#NUM!’, ‘#N/A’)
    • d 时间,date
    • f 公式,formual
    • n 空或数字,null/number
    • s 字符串,string

    3.7 单元格数字格式

    cell.number_format
    
    • 1
    • General 常规
    • 0.00_);[Red]0.000.00 数字
    • mm-dd-yy 短日期
    • [$-F800]dddd,\ mmmm\ dd,\ yyyy 长日期
    • [$-F400]h:mm:ss\ AM/PM 时间
    • 0.00% 百分数
    • # ?/? 分数
    • 0.00E+00 科学计数法
    • @ 文本

    四、样式

    具体默认内建样式可以见源码:https://foss.heptapod.net/openpyxl/openpyxl/-/blob/branch/3.0/openpyxl/styles/builtins.py

    from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
    
    • 1

    4.1 字体

    font = Font(name='Calibri',
                     size=11,
                     bold=False,
                     italic=False,
                     vertAlign=None,
                     underline='none',
                     strike=False,
                     color='FF000000')
    cell.font = font
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.2 填充

    fill = PatternFill(fill_type=None,
                     start_color='FFFFFFFF',
                     end_color='FF000000')
    cell.fill = fill
    
    • 1
    • 2
    • 3
    • 4

    4.3 边框

    border = Border(left=Side(border_style=None,
                               color='FF000000'),
                     right=Side(border_style=None,
                                color='FF000000'),
                     top=Side(border_style=None,
                              color='FF000000'),
                     bottom=Side(border_style=None,
                                 color='FF000000'),
                     diagonal=Side(border_style=None,
                                   color='FF000000'),
                     diagonal_direction=0,
                     outline=Side(border_style=None,
                                  color='FF000000'),
                     vertical=Side(border_style=None,
                                   color='FF000000'),
                     horizontal=Side(border_style=None,
                                    color='FF000000')
                    )
    cell.border = border
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.4 对齐

    alignment=Alignment(horizontal='general',
                         vertical='bottom',
                         text_rotation=0,
                         wrap_text=False,
                         shrink_to_fit=False,
                         indent=0)
    cell.alignment = alignment 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.5 内建样式

    见文档:https://openpyxl.readthedocs.io/en/stable/styles.html#using-builtin-styles

    参考

    1. https://openpyxl.readthedocs.io/en/stable/usage.html
  • 相关阅读:
    免费搜索vs付费搜索:百度谷歌的有力竞争者刚刚出现!
    基于yoloV7添加关键点训练记录
    html实现个人空间主页(附源码)
    今天的码农女孩学习了关于ajax技术
    windows10 python pip安装django并创建demo
    Linux文件系统
    目标检测中生成锚框函数详解
    啥,你居然不知道MySQL主从复制,那还不赶紧来补一补
    【数据结构】树和二叉树的应用(哈夫曼树和哈夫曼编码、堆和优先级队列)
    QT(9.1)对话框与事件处理
  • 原文地址:https://blog.csdn.net/qq_23091073/article/details/128128520
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号