开始在内存中使用

创建一个workbook

在刚开始使用openpyxl的时候,不需要直接在文件系统中创建一个文件,仅仅需要导入Workbook类并开始使用它:

>>> from openpyxl import Workbook

>>> wb = Workbook()

一个workbook总是会创建至少一个worksheet(工作表),可以通过openpyxl.workbook.Workbook.active()这个属性去获取:

>>> ws = wb.active

这个函数使用_active_sheet_index这个属性,默认设置的值是0,除非你指定一个值,否则总是获取到第一个worksheet。

你可以使用openpyxl.workbook.Workbook.create_sheet()来创建一个新的worksheet:

>>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default)# or

>>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position

当创建脚标的时候会自动创建一个名字,按照(Sheet, Sheet1, Sheet2, ...)这个列表名创建,你可以使用tiitle属性来修改这个名字:

>>> ws.title = "New Title"

一旦给了一个worksheet名字,就可以通过一个key去获取这个worksheet:

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

你可以使用openpyxl.workbook.Workbook.sheetnames()这个属性获取所有的脚标的名字:

>>> print(wb.sheetnames)['Sheet2', 'New Title', 'Sheet1']

可以迭代所有的脚标:

>>> for sheet in wb:

... print(sheet.title)

可以使用openpyxl.workbook.Workbook.copy_worksheet()这个属性复制一个worksheet:

>>> source = wb.active

>>> target = wb.copy_worksheet(source)

注意:只有cells 和 styles能够被复制,不能在workbooks之间复制worksheets,你可以在一个workbook中复制worksheets

玩数据

获取一个cell

现在我们已经知道怎么访问一个worksheet,我们可以开始修改cell的内容了。(一个cell就是一个单元格)

cell可以直接通过key来获取:

>>> c = ws['A4']

这将会返回一个cell或创建一个不存在的cell。cell 的值可以直接被赋值:

>>> ws['A4'] = 4

也可以使用另外一个方法openpyxl.worksheet.Worksheet.cell():

>>> d = ws.cell(row=4, column=2, value=10)

Note:当在内存当中创建一个worksheet的时候,它没有包含任何cell,当它们第一次被访问的时候被创建

Warning:因为excel表的滚动特性,滚动出来的cell也会被创建出来,即使没有访问那些cell,例如:

>>> for i in range(1,101):

... for j in range(1,101):

... ws.cell(row=i, column=j)

这将会创建100*100个空的cell

访问多个cell

使用切片可以访问多个cell

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

行和列能够被轻松的获取到:

>>> colC = ws['C']

>>> col_range = ws['C:D']

>>> row10 = ws[10]

>>> row_range = ws[5:10]

也可以使用openpyxl.worksheet.Worksheet.iter_rows()这个方法:

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

... for cell in row:

... print(cell)

相似的方法openpyxl.worksheet.Worksheet.iter_cols()也可以:

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

... for cell in col:

... print(cell)

如果你想迭代一个文件的所有行或列,可以使用openpyxl.worksheet.Worksheet.rows()这个属性:

>>> ws = wb.active

>>> ws['C9'] = 'hello world'

>>> tuple(ws.rows)

((, , ),

(, , ),

(, , ),

(, , ),

(, , ),

(, , ),

(, , ),

(, , ),

(, , ))

或者openpyxl.worksheet.Worksheet.columns()这个属性:

>>> tuple(ws.columns)

((,

,

,

,

,

,

...

,

,

),

(,

,

,

,

,

,

,

,

))

数据存储

一旦我们有了一个openpyxl.cell.Cell,我们就可以给它赋值:

>>> c.value = 'hello, world'

>>> print(c.value)'hello, world'

>>> d.value = 3.14

>>> print(d.value)3.14

也能使用类型和格式推断:

>>> wb = Workbook(guess_types=True)

>>> c.value = '12%'

>>> print(c.value)

0.12

>>> import datetime

>>> d.value = datetime.datetime.now()

>>> print d.valuedatetime.datetime(2010, 9, 10, 22, 25, 18)

>>> c.value = '31.50'

>>> print(c.value)

31.5

保存到文件

最简单和快速的保存一个workbook方法是使用openpyxl.workbook.Workbook模块的openpyxl.workbook.Workbook.save()这个方法:

>>> wb = Workbook()

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

Warning:这个方法将会在没有警告提示下覆盖已经有的内容

可以使用template=True将一个workbook保存成一个模版:

>>> wb = load_workbook('document.xlsx')

>>> wb.template = True

>>> wb.save('document_template.xltx')

或者设置这个属性为false(默认)来保存为一个文件:

>>> wb = load_workbook('document_template.xltx')

>>> wb.template = False

>>> wb.save('document.xlsx', as_template=False)

*Warning:当保存文档的时候在模版文档中你应该注意文档的扩展名(后缀名)和数据描述,否则可能会导致文档不能被再次打开,如下错误式例:

>>> wb = load_workbook('document.xlsx')

>>> # 应该保存成扩展名为*.xlsx

>>> wb.save('new_document.xlsm')

>>> # Excel软件不能再次打开此文件

>>>

>>> # 或者

>>>

>>> # 应该指定属性keep_vba=True

>>> wb = load_workbook('document.xlsm')

>>> wb.save('new_document.xlsm')

>>> # Excel软件不能再次打开此文件

>>>

>>> # 或者

>>>

>>> wb = load_workbook('document.xltm', keep_vba=True)

>>> # 如果我们需要一个模版文件,就必须指定扩展名为 *.xltm.

>>> wb.save('new_document.xlsm')

>>> # Excel软件不能再次打开此文件

加载一个文件

类似于写文件,可以导入openpyxl.load_workbook()来打开一个已经存在的workbook:

>>> from openpyxl import load_workbook

>>> wb2 = load_workbook('test.xlsx')

>>> print wb2.get_sheet_names()

['Sheet2', 'New Title', 'Sheet1']

基本教程已经完了。接下来是一些使用例子:

写一个workbook

>>> from openpyxl import Workbook

>>> from openpyxl.compat import range

>>> from openpyxl.utils import get_column_letter

>>>

>>> wb = Workbook()

>>>

>>> dest_filename = 'empty_book.xlsx'

>>>

>>> ws1 = wb.active

>>> ws1.title = "range names"

>>>

>>> for row in range(1, 40):

... ws1.append(range(600))

>>>

>>> ws2 = wb.create_sheet(title="Pi")

>>>

>>> ws2['F5'] = 3.14

>>>

>>> ws3 = wb.create_sheet(title="Data")

>>> for row in range(10, 20):

... for col in range(27, 54):

... _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))

>>> print(ws3['AA10'].value)

AA

>>> wb.save(filename = dest_filename)

读取一个已经存在的文件

>>> from openpyxl import load_workbook

>>> wb = load_workbook(filename = 'empty_book.xlsx')

>>> sheet_ranges = wb['range names']

>>> print(sheet_ranges['D18'].value)

警告:openpyxl不能读取Excle中所有的对象,当打开和保存相同名字的文件的时候,图片和图表将会丢失

使用数字格式:

>>> import datetime

>>> from openpyxl import Workbook

>>> wb = Workbook()

>>> ws = wb.active

>>> # set date using a Python datetime

>>> ws['A1'] = datetime.datetime(2010, 7, 21)

>>>

>>> ws['A1'].number_format

'yyyy-mm-dd h:mm:ss'

>>> # You can enable type inference on a case-by-case basis

>>> wb.guess_types = True

>>> # set percentage using a string followed by the percent sign

>>> ws['B1'] = '3.14%'

>>> wb.guess_types = False

>>> ws['B1'].value

0.031400000000000004

>>>

>>> ws['B1'].number_format

'0%'

使用公式:

>>> from openpyxl import Workbook

>>> wb = Workbook()

>>> ws = wb.active

>>> # add a simple formula

>>> ws["A1"] = "=SUM(1, 1)"

>>> wb.save("formula.xlsx")

警告:公式必须使用英文名,并且公式的参数必须使用逗号分隔,不能使用其他的符号如分号

openpyxl从不评估公式,但是可以检查公式的名字:

>>> from openpyxl.utils import FORMULAE

>>> "HEX2DEC" in FORMULAE

True

如果你想使用一个不知道的公式,这可能是因为你使用的公式,没有包括在初始规范。 这样的公式必须以xlfn作为前缀。

合并/取消合并单元格:

>>> from openpyxl.workbook import Workbook

>>>

>>> wb = Workbook()

>>> ws = wb.active

>>>

>>> ws.merge_cells('A1:B1')

>>> ws.unmerge_cells('A1:B1')

>>>

>>> # or

>>> ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4)

>>> ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)

插入图片:

>>> from openpyxl import Workbook

>>> from openpyxl.drawing.image import Image

>>>

>>> wb = Workbook()

>>> ws = wb.active

>>> ws['A1'] = 'You should see three logos below'

>>> # create an image

>>> img = Image('logo.png')

>>> # add to worksheet and anchor next to cells

>>> ws.add_image(img, 'A1')

>>> wb.save('logo.xlsx')

折叠列:

>>> import openpyxl

>>> wb = openpyxl.Workbook()

>>> ws = wb.create_sheet()

>>> ws.column_dimensions.group('A','D', hidden=True)

>>> wb.save('group.xlsx')

使用Pandas 和 NumPy

openpyxl可以配合使用Pandas 和 NumPy这两个很受欢迎的库

NumPy Support

openpyxl已内置支持NumPy类型float,integer和boolean。 DateTimes支持使用Pandas的时间戳类型。

openpyxl.utils.dataframe.dataframe_to_rows()方法提供简单的方式使用Pandas 的Dataframes:

from openpyxl import Workbook

from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook()

ws = wb.active

for r in dataframe_to_rows(df, index=True, header=True):

ws.append(r)

要将数据框转换为突出显示的标题和索引:

wb = Workbook()

ws = wb.active

for r in dataframe_to_rows(df, index=True, header=True):

ws.append(r)

for cell in ws['A'] + ws[1]:

cell.style = 'Pandas'

wb.save("pandas_openpyxl.xlsx")

如果你只是想转换数据,可以使用只写模式:

from openpyxl.cell.cell import WriteOnlyCell

wb = Workbook(write_only=True)

ws = wb.create_sheet()

cell = WriteOnlyCell(ws)

cell.style = 'Pandas'

def format_first_row(row, cell):

for c in row:

cell.value = c

yield cell

rows = dataframe_to_rows(df)

first_row = format_first_row(next(rows), cell)

ws.append(first_row)

for row in rows:

row = list(row)

cell.value = row[0]

row[0] = cell

ws.append(row)

wb.save("openpyxl_stream.xlsx")

将工作表转换为Dataframe

要将工作表转换为Dataframe,您可以使用values属性。 如果工作表没有标题或索引,这很容易:

df = DataFrame(ws.values)

如果工作表有标题或索引,例如Pandas创建的那个,那么需要做更多的工作:

data = ws.values

cols = next(data)[1:]

data = list(data)

idx = [r[0] for r in data]

data = (islice(r, 1, None) for r in data)

df = DataFrame(data, index=idx, columns=cols)

使用过滤和排序

要添加过滤器,请定义范围,然后添加列和排序条件:

from openpyxl import Workbook

wb = Workbook()

ws = wb.active

data = [

["Fruit", "Quantity"],

["Kiwi", 3],

["Grape", 15],

["Apple", 3],

["Peach", 3],

["Pomegranate", 3],

["Pear", 3],

["Tangerine", 3],

["Blueberry", 3],

["Mango", 3],

["Watermelon", 3],

["Blackberry", 3],

["Orange", 3],

["Raspberry", 3],

["Banana", 3]

]

for r in data:

ws.append(r)

ws.auto_filter.ref = "A1:B15"

ws.auto_filter.add_filter_column(0, ["Kiwi", "Apple", "Mango"])

ws.auto_filter.add_sort_condition("B2:B15")

wb.save("filtered.xlsx")

这将添加相关的指令到文件,但不会实际过滤或排序。

注意:文章翻译了一部分openpyxl的官方文档,还有部分内容暂时没有翻译。

python如何安装扩展库openpyxl和numpy_OpenPyXl的使用相关推荐

  1. python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)

    Python第三方库之openpyxl(2) 简单的使用 写一个工作簿 >>> from openpyxl importWorkbook>>> from openp ...

  2. python安装扩展库常用的工具是什么和conda_python习题01——董付国学习系列

    一.简答题 1.python程序的__name__的作用是什么? 每一个python程序都有一个__name__变量,用来表示程序的运行方式,当作为模块导入时,__name__变量的值等于程序文件名, ...

  3. pip升级python包命令_python安装扩展库常用的是什么工具

    pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 目前如果你在 http://python.org 下载最新版本的安装包,则是已经自带了该工具. P ...

  4. python安装扩展常用的工具是_Python 安装扩展库常用的是 _______ 工具_学小易找答案...

    [单选题]若用一个字节存储一个正整数,则这个正整数的最小值和最大值分别是 ________ . (1.0分) [单选题]有甲.乙.丙.丁四位同学,用米尺测量一根铜棒的长度,各人所得的结果表达如下,正确 ...

  5. 微课|玩转Python轻松过二级(1.5节):安装扩展库

    适用教材: 董付国.<玩转Python轻松过二级>.清华大学出版社,2018. 第1章  Python概述 1.5  安装扩展库的几种方法 图书购买链接 京东:https://item.j ...

  6. 微课|中学生可以这样学Python(1.4节):安装扩展库

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第1章  Python概述 1.4  安装扩展库 京东购买链接:https://item.jd.c ...

  7. Python编程常见出错信息及原因分析(5):安装扩展库

    本文主要介绍使用pip安装扩展库时常见的错误. (1)pip命令应该在命令提示符环境中执行,如果在Python开发环境中执行,则会出现下面的错误: (2)不存在要安装的扩展库,此时应仔细检查是否有拼写 ...

  8. Python安装扩展库与打包成exe可执行文件的方法

    1.安装扩展库的几种方法. 首先可能需要使用 pip install --upgrade pip 来升级本机的pip程序.然后在命令提示符环境(即cmd方式)执行下面的命令(以numpy为例): py ...

  9. python安装扩展库常用的命令_Python环境——安装扩展库

    一.修改easy_install源 在操作用户家目录添加一个文件 cat >> ~/.pydistutils.cfg < [easy_install] index-url = htt ...

最新文章

  1. 一个没有意义的宇宙我们很难想象
  2. bLock 回调 就是这么简单!
  3. 机器学习系列之手把手教你实现一个决策树
  4. np.nonzero()函数的解析
  5. PhP加载时显示动画,在ajax请求完之前的loading加载的动画效果实现
  6. linux命令之tee,linux tee命令
  7. 深入了解TMG企業版的獨立陣列
  8. win10系统下载文件、解压缩文件时文件名称乱码的问题解决方法
  9. 构建企业级DNS系统(五)bind9日志记录
  10. SD-Host 控制器设计
  11. cydia 未能连接服务器,iOS 越狱全过程,解决cydia或sileo无法联网问题
  12. asa清空配置_思科ASA防火墙基本配置
  13. 在线古诗自动生成器的设计与实现
  14. 硬盘数据恢复软件免费版有免费使用的吗
  15. 使用excel2007做聚光灯
  16. idea双击打不开的解决方案
  17. java根据excel中的手机号查询归属地并添加到excel
  18. 注册ArcGIS Online账号||免费使用21天(保姆级)
  19. SpringBoot核心注解
  20. 解决hadoop损失文件删除后出现DEPRECATED: Use of this script to execute hdfs command is deprecated.

热门文章

  1. chimee hls m3u8
  2. 文字样式的常见属性的如何使用?
  3. 使用ArcMap中的工具时,总是弹出windows安全警告窗口解决方法
  4. c#将字符串转换为数组_C# 字符串转数组
  5. rubik-cube-solver 使用js求解魔方
  6. python字典查找字符串_Python_列表、字典、字符串、集合操作
  7. 对计算机课画图课的点评,第一课 认识计算机中的画图程序.doc
  8. 升级linux4.9 故障,CentOS 4升级到4.9
  9. 静态路由简介及配置---有栗子
  10. 打开远程桌面保存成rdp文件