用 Python 处理 Excel 文件

作者: lovexiaov | 来源:发表于2015-12-14 22:02 被阅读3617次

    0x00. 前言

    最近工作中有个处理 Excle 数据的需求,正好拿 Python 来练练手。简单搜了下,发现一个好网站:www.python-excel.org(可能需要爬墙头,请自理~),网站中介绍了几种开源的 Excel 处理框架,本文选择了排在第一位的openpyxl

    python-excel.org

    0x01. 使用

    虽然是一个开源工具,它却拥有详细的文档参考,打不开也没关系,文章末尾会给出 PDF 格式下载链接。下面就来介绍该工具的基本使用。

    使用环境

    • Mac OS X 10.11.2
    • Python 2.7.11

    安装

    如果你使用 Mac 或者 Linux 系统,那么安装将特别简单:

    $ pip install openpyxl 
    

    有同学会问,如果没有 pip 或 windows 系统咋办啊?简单!可以从这里下载源码安装。下载并解压后,进入到解压目录,执行:

    $ python setup.py install
    

    使用

    安装完毕后就可以使用了,先简单介绍一下,该工具有几个主要的类:

    • Workbook: 代表一个 Excel 文件(工作簿)。
    • Worksheet: 代表 Excel 文件中的一个工作表。
    • Cell: 代表一个单元格。

    好了,知道了这几个类的含义后,使用就比较简单了:

    a) 创建 Excel

    from openpyxl import Workbook
    
    # 创建 Excel 对象
    wb = Workbook()
    
    # 保存成文件
    wb.save('test.xlsx')
    

    这样就创建了一个空的、名为test.xslx的工作簿。

    b) 加载一个已存在的 Excel

    from openpyxl import load_workbook
    
    wb = load_workbook('test.xlsx')
    

    这样就加载了一个名为test.xlsx的 Excel 文件。

    c) 操作工作表

    # 获取 Excel 打开后默认的工作表
    default_ws = wb.active
    
    # 创建一个新工作表
    new_ws = wb.create_sheet(title='new ws')
    
    # 修改工作表的名称
    new_ws.title = 'modified ws'
    
    # 迭代工作表中所有行
    for row in new_ws.iter_rows():
        pass
    

    d) 操作单元格

    # 给 “F5” 单元格赋值
    new_ws['F5'] = 'test'
    new_ws['F5'].value = 'hello'
    # 取出 “F5” 单元格的值
    print(new_ws['F5'].value)
    
    # 得到单元格对象
    from openpyxl.cell import Cell
    
    c = Cell(new_ws)
    f5 = new_ws['F5']
    

    以上就是对 Excel对象的基本操作了,但在使用中,我们总会有各种需求,比如:在一些行后添加数据,我们使用new_ws.iter_rows()返回的是一个 tuple 对象,这时,我们需要用list()函数先将其转化为 list 对象,添加数据后再写入文件:

    from openpyxl.cell import Cell
    
    for row in new_ws.iter_rows():
        data = list(row)
        c = Cell(new_ws)
        c.value = 'hello'
        data.append(c)
        
        other_ws.append(data)
    

    0x02. 小结

    openpyxl 的相当强大,还支持操作 Excel 中的图表等高级功能。由于工作中没有用到,就没有去研究,感兴趣的同学可以去看看。

    最后分享一点使用 Python 开源工具的小技巧:

    由于 Python 中动态语言,有时候很难判断一个方法返回的数据类型,我们可以经常使用type()方法将返回值的类型打印出来,方法我们对返回值的使用和处理。

    0x03. 附:

    openpyxl 参考文档:http://pan.baidu.com/s/1c1w77sk

    相关文章

      网友评论

      • 喵小琪:思路清晰
      • 1f272e2ac702:excel表格格式是xlsx吧
        lovexiaov:@fangazio 是的是的,笔误~谢谢纠正。
      • Solomon_Xie:哇看起来好轻松啊
        lovexiaov:@solomonxie 就我遇到的,有时候在已有工作簿中创见新工作表,并写入数据,会这不成功,并影响到原工作表中的数据~
        Solomon_Xie:@lovexiaov -_-! 那我先缓一缓
        lovexiaov: @solomonxie 使用过程中有坑~哈哈

      本文标题:用 Python 处理 Excel 文件

      本文链接:https://www.haomeiwen.com/subject/jkeuhttx.html