创建一个工作簿


  • 使用openpyxl没有必要先在系统中新建一个.xlsx,我们需要做的只需要引入Workbook这个类,接着开始调用它。

    >>> from openpyxl import Workbook
    >>> wb = Workbook()
  • 一个工作簿(workbook)在创建的时候同时至少也新建了一张工作表(worksheet)。你可以通过openpyxl.workbook.Workbook.active()调用得到正在运行的工作表。
    >>> ws = wb.active

    注意:该函数调用工作表的索引(_active_sheet_index),默认是0。除非你修改了这个值,否则你使用该函数一直是在对第一张工作表进行操作。

  • 使用openpyxl.workbook.Workbook.create_sheet()新建一张表
    >>> ws1 = wb.create_sheet() #默认插在工作簿末尾
    # or
    >>> ws2 = wb.create_sheet(0) # 插入在工作簿的第一个位置
  • 在创建工作表的时候系统自动命名。他们按照序列依次命名 (Sheet, Sheet1, Sheet2, ...)。你可以通过调用下面的属性修改工作表的名称:
    ws.title = "New Title"
  • 标签栏的背景色默认为白色。你可以通过提供一个RRGGBB颜色码改变标签栏的字体颜色:
    ws.sheet_properties.tabColor = "1072BA"

    修改颜色效果.png
  • 一旦你获取工作表的名字,你可以通过workbook的key或者 openpyxl.workbook.Workbook.get_sheet_by_name()
    方法得到该工作表

    >>> ws3 = wb["New Title"]
    >>> ws4 = wb.get_sheet_by_name("New Title")
    >>> ws is ws3 is ws4
    True
  • 你可以通过openpyxl.workbook.Workbook.get_sheet_names() 方法得到工作簿的所有工作表。
    >>> print(wb.get_sheet_names())
    ['Sheet2', 'New Title', 'Sheet1']

    你也可以循环得到所有的工作表

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

操作数据


使用一个单元格

现在我们已经知道如何使用一张工作表了,下面我我们开始修改工作表中单元格的内容

  • 单元格可以直接根据他们的索引直接获得

    >>> c = ws['A4']

    通过上述的语句,将返回在A4处的单元格,如果不存在将在A4新建一个。 单元格的值也可以直接赋值

    >>> ws['A4'] = 4
  • 还提供 openpyxl.worksheet.Worksheet.cell() 方法获取单元格
    >>> c = ws.cell('A4')
  • 也可以根据行列值获取单元格
    >>> d = ws.cell(row = 4, column = 2)

    注意:当一个工作表被创建是,其中不包含单元格。只有当单元格被获取是才被创建。这种方式我们不会创建我们从不会使用的单元格,从而减少了内存消耗。

警告:由于上述特性,你如果遍历了单元格而非想要使用它们也将会在内存当中创建。比如下面:

>>> for i in range(1,101):
for j in range(1,101):
ws.cell(row = i, column = j)

上述代码将会在内存中创建100*100个单元格。
当然,这里也有方法来清理这些不想要的单元格,在后续我们将会介绍。

使用多个单元格
  • 使用切片获取多个单元格

    >>> cell_range = ws['A1':'C2']
  • 使用openpyxl.worksheet.Worksheet.iter_rows() 方法获得多个单元格
    >>> tuple(ws.iter_rows('A1:C2'))
    ((<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>),
    (<Cell Sheet1.A2>, <Cell Sheet1.B2>, <Cell Sheet1.C2>))
    >>> for row in ws.iter_rows('A1:C2'):
    for cell in row:
    print cell
    <Cell Sheet1.A1>
    <Cell Sheet1.B1>
    <Cell Sheet1.C1>
    <Cell Sheet1.A2>
    <Cell Sheet1.B2>
    <Cell Sheet1.C2>
  • 如果你需要迭代文件中所有的行或者列,你可以使用openpyxl.worksheet.Worksheet.rows()
    >>> ws = wb.active
    >>> ws['C9'] = 'hello world'
    >>> ws.rows
    ((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
    (<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
    (<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
    (<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
    (<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
    (<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
    (<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
    (<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
    (<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))

    或者使用openpyxl.worksheet.Worksheet.columns()方法

    >>> ws.columns
    ((<Cell Sheet.A1>,
    <Cell Sheet.A2>,
    <Cell Sheet.A3>,
    <Cell Sheet.A4>,
    <Cell Sheet.A5>,
    <Cell Sheet.A6>,
    ...
    <Cell Sheet.B7>,
    <Cell Sheet.B8>,
    <Cell Sheet.B9>),
    (<Cell Sheet.C1>,
    <Cell Sheet.C2>,
    <Cell Sheet.C3>,
    <Cell Sheet.C4>,
    <Cell Sheet.C5>,
    <Cell Sheet.C6>,
    <Cell Sheet.C7>,
    <Cell Sheet.C8>,
    <Cell Sheet.C9>))
数据存储
  • 一旦我们有一个openpyxl.cell.Cell,我们可以直接为该单元格赋值

    >>> c.value = 'hello, world'
    >>> print(c.value)
    'hello, world'
    >>> d.value = 3.14
    >>> print(d.value)
    3.14
  • 你也可以使用Python中的其他类型和格式
    >>> wb = Workbook(guess_types=True)
    >>> c.value = '12%'
    >>> print(c.value)
    0.12
    >>> import datetime
    >>> d.value = datetime.datetime.now()
    >>> print d.value
    datetime.datetime(2010, 9, 10, 22, 25, 18)
    >>> c.value = '31.50'
    >>> print(c.value)
    31.5

保存到文件


  • 保存工作簿最简单最安全的方式是使用openpyxl.workbook.Workbookopenpyxl.workbook.Workbook.save() 方法

    >>> wb = Workbook()
    >>> wb.save('balances.xlsx')

    !特别警告:这个操作将会在没有认识提示的情况下用现在写的内容,覆盖掉原文件中的所有内容

  • 你也可以 as_template=True,将文件保存称为一个模板
    >>> wb = load_workbook('document.xlsx')
    >>> wb.save('document_template.xltx', as_template=True)
  • 如果as_template=False(默认),则将文件或模板保存为文件
    >>> wb = load_workbook('document_template.xltx')
    >>> wb.save('document.xlsx', as_template=False)
    >>> wb = load_workbook('document.xlsx')
    >>> wb.save('new_document.xlsx', as_template=False)

    警告:在保存文件到文件模板中的时候你应该监控数据的属性和文件扩展名,反之亦然;否则,你得到的工作簿可能无法打开。
    比如下面的:

    >>> wb = load_workbook('document.xlsx')
    >>> # Need to save with the extension *.xlsx
    >>> wb.save('new_document.xlsm')
    >>> # MS Excel can't open the document
    >>>
    >>> # or
    >>>
    >>> # Need specify attribute keep_vba=True
    >>> wb = load_workbook('document.xlsm')
    >>> wb.save('new_document.xlsm')
    >>> # MS Excel can't open the document
    >>>
    >>> # or
    >>>
    >>> wb = load_workbook('document.xltm', keep_vba=True)
    >>> # If us need template document, then we need specify extension as *.xltm.
    >>> # If us need document, then we need specify attribute as_template=False.
    >>> wb.save('new_document.xlsm', as_template=True)
    >>> # MS Excel can't open the document

从文件中导入


  • 和写入文件的方式相同,你可以引入openpyxl.load_workbook()来打开一个已经存在的工作簿

    >>> from openpyxl import load_workbook
    >>> wb2 = load_workbook('test.xlsx')
    >>> print wb2.get_sheet_names()
    ['Sheet2', 'New Title', 'Sheet1']

作者:LeeLom
链接:http://www.jianshu.com/p/642456aa93e2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

7、Python文件操作工具 openpyxl 工具 2的更多相关文章

  1. 6、Python文件操作工具 openpyxl 工具

    #-*- coding:utf-8 -* from  openpyxl.reader.excel  import  load_workbook import  MySQLdb import  time ...

  2. 3、Python文件操作工具 xlwt 工具

    # _*_ encoding:utf-8 _*_ import xlrdimport xlwt #新建excel文件excel = xlwt.Workbook(encoding='utf-8')#添加 ...

  3. 4、Python文件操作工具 xlsxwriter 工具

    # _*_ encoding:utf-8 _*_ import xlsxwriter #创建xlsx后缀名的excelexcel = xlsxwriter.Workbook(r'D:\github\f ...

  4. 2、Python文件操作工具 xlrd 工具

    #打开excel文档workbook = xlrd.open_workbook('..\cye.xls',encoding_override='utf-8') #获取sheet页信息sheet = w ...

  5. python文件上传工具实现

    0x00 之前验收waf模块webshell效果,组网pc--waf--webserver,收集网络上的webshell样本,进行上传测试.由于数量较多8000+个样本, 只好写了个工具进行验收. w ...

  6. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

  7. Python之文件操作工具

    逐步完善中. #!/usr/bin/python3 # -*- coding: utf-8 -*- import os import codecs #支持多国语言的编码解码 import charde ...

  8. Python趣味实用小工具

    代码地址如下:http://www.demodashi.com/demo/12918.html python 趣味实用小工具 概述 用python实现的三个趣味实用小工具: 图片转Execl工具 , ...

  9. 『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

随机推荐

  1. ansible 回调函数处理

    https://www.u3v3.com/ar/1421 https://serversforhackers.com/c/running-ansible-2-programmatically

  2. 【angular5 项目积累总结】项目公共样式

    main.css @font-face { font-family: 'wf_segoe-ui_normal'; src: local('Segoe UI'),url('../fonts/segoe- ...

  3. JavaScript中自定义函数以及文本框、radio、下拉框的值的获取,结合淘宝竞拍案例来理解。。。

    淘宝竞拍案例: HTML部分代码: <form action="#" method="post"> <h2>欢迎进入淘宝竞拍</h ...

  4. 个人开源项目之异步Http线程池框架

    项目开源于:https://github.com/HouZhiHouJue/AsyncHttpThreadPool 示意图:

  5. ASP.NET页面支持的指令

    页面的处理指令 页面指令的处理用于配置执行该页面的运行时环境.在ASP.NET中,指令可以位于页面的任何位置,但良好且常见的习惯是将其置于文件的开始部分.除此,页面指令的名称是不区分大小写的,且指令的 ...

  6. apache 优化配置详解

    ###=========httpd.conf begin===================##Apache主配置文件##设置服务器的基础目录,默认为Apache安装目录ServerRoot &qu ...

  7. PHP之httpRequest

    <?php /** * Respose A Http Request * * @param string $url * @param array $post * @param string $m ...

  8. Nodejs + express post get 参数获取小结

    req.params.xxxxx 从path中的变量 req.query.xxxxx 从get中的?xxxx=中 req.body.xxxxx 从post中的变量 Post下别忘了: app.use( ...

  9. H5前端正则验证插件

    最近学习了一个新的关于前端正则验证的插件,‘jQuery.validate.js ’ 要用这个插件 首先得有插件,下载jquery.validate.min.js 和jq文件并引入. 我把它简单的通俗 ...

  10. 关于 webpack 跨域

    一.使用  http-proxy-middleware  代理 安装 http-proxy-middleware 依赖 在src 目录下 新建一个 setupProxy.js文件 // 引用依赖 va ...