python2使用openpyxl_Python第三方库之openpyxl(2)

简单的使用

写一个工作簿

176833888_1_20191130051352844.gif

View Code

读一个现有的工作簿

>>> from openpyxl import load_workbook

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

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

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

3

注意:在loadworkbook中有几个可以使用的标志

1.guess_types 在读取单元时启用或禁用(默认)类型推断

2.data_only 控制带有公式的单元格是否有公式(默认)或上次Excel读取表的值

3.keep_vba 控制任何可视的基本元素是否被保留(默认)。如果它们被保存了它们仍然是不可编辑的

注意:openpyxl目前没有在Excel文件中读取所有可能的项目,因此如果打开并保存相同的名称,那么图像和图表将从现有文件中丢失

使用数字格式

176833888_2_20191130051353391.gif

>>> import datetime

>>> from openpyxl import Workbook

>>> wb = Workbook()

>>> ws = wb.active

>>> #使用Python datetime设置日期

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

>>>

>>> ws['A1'].number_format

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

>>> #您可以在具体情况下启用类型推断

>>> wb.guess_types = True

>>> #使用字符串和%符号设置百分比

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

>>> wb.guess_types = False

>>> ws['B1'].value

0.031400000000000004

>>>

>>> ws['B1'].number_format

'0%'

176833888_2_20191130051353391.gif

使用公式

>>> from openpyxl import Workbook

>>> wb = Workbook()

>>> ws = wb.active

>>> #添加一个简单的公式

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

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

注意:你必须使用英文名作为一个函数,函数参数必须用逗号隔开,而不是其他的标点符号,比如分号

openpyxl从来没有计算过公式但是可以检查公式的名称

>>> from openpyxl.utils import FORMULAE

>>> "HEX2DEC" in FORMULAE

True

合并/ 分割单元格

176833888_2_20191130051353391.gif

>>> from openpyxl.workbook import Workbook

>>>

>>> wb = Workbook()

>>> ws = wb.active

>>>

>>> ws.merge_cells('A2:D2')

>>> ws.unmerge_cells('A2:D2')

>>>

>>> #相当于

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

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

176833888_2_20191130051353391.gif

插入图像

>>> from openpyxl import Workbook

>>> from openpyxl.drawing.image import Image

>>>

>>> wb = Workbook()

>>> ws = wb.active

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

>>> #制作一个图片

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

>>> #在单元格旁边添加工作表和锚

>>> 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一起工作

NumPy支持

openpyxl已经为NumPy类型的浮点数、整数和布尔型提供了支持。使用pandas的时间戳类型支持DateTimes

Working with Pandas Dataframes

openpyxl.utils.dataframe.dataframe_to_rows()函数提供了一个简单的方式来处理Pandas Dataframes

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)

虽然pandas本身支持转换为Excel,但这为客户端代码提供了额外的灵活性,包括将dataframes直接传输到文件的能力。

将一个dataframe转换为高亮显示标题和索引的工作表

176833888_2_20191130051353391.gif

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")

176833888_2_20191130051353391.gif

或者,如果你只想转换数据你可以使用write-only模式

176833888_1_20191130051352844.gif

View Code

这段代码和标准的工作簿同样适用

将工作表转换为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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值