社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

5 分钟掌握 openpyxl 操作:Python 轻松处理 Excel

Python绿色通道 • 5 年前 • 1026 次点击  

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包 】送你Python自学大礼包

来源:python中文社区


各种数据需要导入Excel?多个Excel要合并?目前,Python处理Excel文件有很多库,openpyxl算是其中功能和性能做的比较好的一个。接下来我将为大家介绍各种Excel操作。

打开Excel文件

新建一个Excel文件

    >>> from openpyxl import Workbook
    >>> wb = Workbook()

打开现有Excel文件

    >>> from openpyxl import load_workbook
    >>> wb2 = load_workbook('test.xlsx')

打开大文件时,根据需求使用只读或只写模式减少内存消耗。

wb = load_workbook(filename='large_file.xlsx', read_only=True)

wb = Workbook(write_only=True)

获取、创建工作表

获取当前活动工作表:

    >>> ws = wb.active

创建新的工作表:

    >>> ws1 = wb.create_sheet("Mysheet"# insert at the end (default)
    # or
    >>> ws2 = wb.create_sheet("Mysheet"0# insert at first position
    # or
    >>> ws3 = wb.create_sheet("Mysheet"-1# insert at the penultimate position

使用工作表名字获取工作表:

    >>> ws3 = wb["New Title"]

获取所有的工作表名称:

    >>> print(wb.sheetnames)
    ['Sheet2''New Title''Sheet1']
使用for循环遍历所有的工作表:

    >>> for sheet in wb:
    ...     print(sheet.title)

保存

保存到流中在网络中使用:




    
    >>> from tempfile import NamedTemporaryFile
    >>> from openpyxl import Workbook
    >>> wb = Workbook()
    >>> with NamedTemporaryFile() as tmp:
            wb.save(tmp.name)
            tmp.seek(0)
            stream = tmp.read()
保存到文件:

    >>> wb = Workbook()
    >>> wb.save('balances.xlsx')
保存为模板:

    >>> wb = load_workbook('document.xlsx')
    >>> wb.template = True
    >>> wb.save('document_template.xltx')

单元格

单元格位置作为工作表的键直接读取:

    >>> c = ws['A4']

为单元格赋值:

    >>> ws['A4'] = 4
    >>> c.value = 'hello, world'

多个单元格可以使用切片访问单元格区域:

    >>> cell_range = ws['A1':'C2']

使用数值格式:

    >>> # set date using a Python datetime
    >>> ws['A1'] = datetime.datetime(2010721)
    >>>
    >>> ws['A1'].number_format
    'yyyy-mm-dd h:mm:ss'

使用公式:

    >>> # add a simple formula
    >>> ws["A1"] = "=SUM(1, 1)"

合并单元格时,除左上角单元格外,所有单元格都将从工作表中删除:

    >>> ws.merge_cells('A2:D2')
    >>> ws.unmerge_cells('A2:D2')
    >>>
    >>> # or equivalently
    >>> 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

行、列

可以单独指定行、列、或者行列的范围:

    >>> colC = ws['C']
    >>> col_range = ws['C:D']
    >>> row10 = ws[10]
    >>> row_range = ws[5:10]

可以使用Worksheet.iter_rows()方法遍历行:

    >>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    ...    for cell in row:
    ...        print(cell)
    
    
    
    
    
    

同样的Worksheet.iter_cols()方法将遍历列:




    
    >>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
    ...     for cell in col:
    ...         print(cell)
    
    
    
    
    
    

遍历文件的所有行或列,可以使用Worksheet.rows属性:

    >>> ws = wb.active
    >>> ws['C9'] = 'hello world'
    >>> tuple(ws.rows)
    ((),
    (),
    (),
    (),
    (),
    (),
    (),
    (),
    ())

Worksheet.columns属性:

    >>> tuple(ws.columns)
    ((,
    ,
    ,
    ,
    ,
    ,
    ...
    ,
    ,
    ),
    (,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ))

使用Worksheet.append()或者迭代使用Worksheet.cell()新增一行数据:

    >>> for row in range(140):
    ...     ws1.append(range(600))

    >>> for row in range(1020):
    ...     for col in range(2754):
    ...         _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))

插入操作比较麻烦。可以使用Worksheet.insert_rows()插入一行或几行:

     >>> from openpyxl.utils import get_column_letter
     >>> ws.insert_rows(7
     >>> row7 = ws[7]
     >>> for col in range(2754):
    ...         _ = ws3.cell(column=col, row=7, value="{0}".format(get_column_letter(col)))

Worksheet.insert_cols()操作类似。Worksheet.delete_rows()Worksheet.delete_cols()用来批量删除行和列。

只读取值

使用Worksheet.values属性遍历工作表中的所有行,但只返回单元格值:

    for row in ws.values:
       for value in row:
         print(value)

Worksheet.iter_rows()Worksheet.iter_cols()可以设置values_only参数来仅返回单元格的值:

    >>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
    ...   print(row)
    (NoneNoneNone)
    (NoneNoneNone)


作者:Sinchard,主攻Python库文档翻译,开发代码片段,源码分析

Blog:zhihu.com/people/aiApple

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

Python自学超级硬核资料


最后送大家一份Python学习大礼包,从Python基础,爬虫,数据分析Web开发等全套资料,吃透资料,你可以扔掉其他资料,这些资料都是视频,学起来非常友好 


Ps:都是视频学习资料,非常适合基础不好或者零基础的同学



推荐阅读

  1. 华科再次拿下华为“天才少年”最高薪!201万给到通信应届博士生

  2. 公司起诉技术总监索赔 90 万元,称其拖延研发进度

  3. 585页Python编程快速上手,重实操的经典之作!(附网盘链接和提取码)

  4. 如何用 Python + Scrapy 爬取视频?

  5. 有了这款神器,轻松用 Python 写个 APP

看完记得关注@Python绿色通道
及时收看更多好文
↓↓↓

点击卡片关注Python绿色通道

回复:大礼包,领取最新Python学习资料


🧐分享、点赞、在看,给个三连击呗

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/117144