创建一个工作簿


  • 使用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. 解决eclipse为什么不能查看源码

    Java eclipse中查看源代码ctrl+左键单击 一.你是第一次使用该功能,没有导入项目源码,故无法查看源码 解决方法: ​1.点 “window“-> “Preferences”-> ...

  2. 【原】zookeeper集群配置常见问题说明

    zookeeper集群网上demo一大堆,补充一下一些不明白的地方 1 复制2份zookeeper,savle作为备份节点 2.配置zoo.cfg # The number of millisecon ...

  3. Source not found ( Eclipse 关联源代码)

    一.问题 有时候我们在查看源码时提示没有找到, 这时就需要我们手动关联源码 二.关联 首先需要根据提示下载对应的源代码文件 选择我们下载好的源码 三.修改/删除关联 如果需要重新切换源码 四.参考 j ...

  4. Spring 中的Enum HttpStatus 及HTTP状态码

    官方API https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.htm ...

  5. SpringBoot 初体验

    1.Spring Boot 简介 简化Spring应用开发的一个框架 整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 2.微服务 2014, martin fowler 微服务:架构 ...

  6. UNIX IPC: POSIX 消息队列

    首先在我的MAC OSX上试了一下虽然有_POSIX_MESSAGE_PASSING的宏定义,但是用gcc编译会提示没有mqueue.h头文件,先放一边.在Ubuntu上使用正常,不过POSIX消息队 ...

  7. Access MetaData

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. css 各种常见布局整理

    在学习各种布局之前我们先来认识各个关键词,理解这些关键词,然后由点到面,这样就简单多了. display属性 页面中每个元素都有一个默认的display属性,它的值与该元素的类型有关,默认值通常是 b ...

  9. Jarvis OJ-Reverse题目Writeup

    做一道更一道吧233333 DD-Android Easy 下载apk,先安装一下试试吧…… 猜测是输入正确的内容后给flag吧 将后缀改成zip,解压,用dex2jar处理classes.dex,然 ...

  10. axios 同步问题

    Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中(这是官方文档给出的一个解释说明) 它的主要作用是向后台发起异步请求,还有在请求中做更多的可控功能 1. ...