创建一个工作簿


  • 使用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. JMM随笔

    What? Java内存模型(Java Memory Model,JMM)主要是为了规定了线程和内存之间的一些关系. 根据JMM的设计: 系统存在一个主内存(Main Memory),Java中所有变 ...

  2. 写Markdown费事?Typora让你像写word一样行云流水,所见即所得。

    Typora 简介 Typora删除了预览窗口,以及所有其他不必要的干扰.取而代之的是实时预览. Markdown的语法因不同的解析器或编辑器而异,Typora使用的是GitHub Flavored ...

  3. Modbus Com SerialPort

    项目中用到的工具,串口modbus协议读写数据. public class ModbusHelper { private readonly SerialPort _serialPort; privat ...

  4. Swift函数_默认参数

    swift中提供了默认参数功能,在声明函数时给参数指定默认值. 例: func inputStudentInfo(name:String,age:Int="26") { print ...

  5. ashx 绝对路径得到物理路径

    //先得到模板页所在的路径 string phyPath = context.Server.MapPath("/p02style.html"); //得到模板的所有内容 strin ...

  6. 信号量 P V测试详解

    信号量 当我们编写的程序使用了线程时,不管它是运行在多用户系统上,多进程系统上,还是运行在多用户多进程系统上,我们通常会发现,程序中存在着一部分临界代码,我们需要确保只有一个进程可以进入这个临界代码并 ...

  7. Cookie,Sesstion,Application 缓存。

    Cookie客户端缓存. 1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要 ...

  8. veloctiy入门

    什么是velocity? velocity是一个基于Java的模板引擎.你可以使用它来预定义模板,并且对模板进行数据渲染,从而动态生成相应的文本.它如同JSP一样经常被使用在MVC分层架构当中,充当V ...

  9. 【C++并发实战】(一)并发基本概念

    什么是并发 并发,最简单的理解就是,两个或者以上的活动同时进行.举个比较实际的例子,你可以手脚并用,两只手做不同的动作等等. 在计算机中的“并发”,是指一个系统可以同时执行多个独立的活动.在以前大多数 ...

  10. Algorithm——无重复字符的最长子串

    一.问题 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "a ...