时间: 2020-09-4|32次围观|0 条评论

创建workbook

无需在文件系统上创建文件即可开始使用openpyxl。只需导入Workbook类并开始工作:

>>> from openpyxl import Workbook>>> wb = Workbook()>>> ws = wb.active

默认获取第一个工作表, 可以使用Workbook.create_sheet()方法创建新的工作表:

>>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default)# or>>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position>>> ws.title = "New Title">>> ws.sheet_properties.tabColor = "1072BA">>> ws3 = wb["New Title"]>>> print(wb.sheetnames)['Sheet2', 'New Title', 'Sheet1']>>> for sheet in wb:...     print(sheet.title)>>> for sheet in wb:...     print(sheet.title)

工作表创建时会自动为其命名。它们按顺序编号(Sheet,Sheet1,Sheet2,...)。可使用Worksheet.title属性更改此名称:

默认情况下,包含此标题的选项卡的背景颜色为白色。您可以更改此项,为Worksheet.sheet_properties.tabColor属性提供RRGGBB颜色代码

仅复制单元格(包括值,样式,超链接和注释)和某些工作表属性(包括维度,格式和属性)。不复制所有其他工作簿/工作表属性 - 例如图片,图表。也无法在工作簿之间复制工作表。如果工作簿以只读或只写模式打开,则无法复制工作表。

访问数据

  • 访问单个单元格
>>> c = ws['A4']>>> ws['A4'] = 4>>> d = ws.cell(row=4, column=2, value=10)

在内存中创建工作表时,它不包含单元格。首次访问时会创建它们。

滚动单元格而不是直接访问它们将在内存中创建它们,即使您没有为它们分配值。

比如:

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

将在内存中创建100x100个单元格,无需任何操作。

  • 访问多个单元格

可以使用切片访问单元格范围:

>>> cell_range = ws['A1':'C2']>>> colC = ws['C']>>> col_range = ws['C:D']>>> row10 = ws[10]>>> row_range = ws[5:10]>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):...    for cell in row:...        print(cell)<Cell Sheet1.A1><Cell Sheet1.B1><Cell Sheet1.C1><Cell Sheet1.A2><Cell Sheet1.B2><Cell Sheet1.C2>>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):...     for cell in col:...         print(cell)<Cell Sheet1.A1><Cell Sheet1.A2><Cell Sheet1.B1><Cell Sheet1.B2><Cell Sheet1.C1><Cell Sheet1.C2>>>> ws = wb.active>>> ws['C9'] = 'hello world'>>> tuple(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>))>>> tuple(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>))

出于性能原因,Worksheet.iter_cols()方法在只读模式下不可用。

  • 只访问值

如果只需要工作表中的值,则可以使用Worksheet.values属性。 这会迭代工作表中的所有行,但只返回单元格值:

for row in ws.values:   for value in row:     print(value)>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):...   print(row)(None, None, None)(None, None, None)

Worksheet.iter_rows()和Worksheet.iter_cols()都可以使用values_only参数来返回单元格的值。

参考资料

数据存储

>>> c.value = 'hello, world'>>> print(c.value)'hello, world'>>> d.value = 3.14>>> print(d.value)3.14>>> wb = Workbook()>>> wb.save('balances.xlsx')# 保存为流>>> from tempfile import NamedTemporaryFile>>> from openpyxl import Workbook>>> wb = Workbook()>>> with NamedTemporaryFile() as tmp:        wb.save(tmp.name)        tmp.seek(0)        stream = tmp.read()# 存为模板>>> wb = load_workbook('document.xlsx')>>> wb.template = True>>> wb.save('document_template.xltx')>>> wb = load_workbook('document_template.xltx')>>> wb.template = False>>> wb.save('document.xlsx', as_template=False)# 打开文件>>> from openpyxl import load_workbook>>> wb2 = load_workbook('test.xlsx')>>> print wb2.sheetnames['Sheet2', 'New Title', 'Sheet1']

文件扩展名不是强制为xlsx或xlsm,但如果您不使用官方扩展名,则可能无法直接使用其他应用程序打开它。
由于OOXML文件基本上是ZIP文件,您也可以使用自己喜欢的ZIP存档管理器打开它。

文章转载于:https://www.jianshu.com/p/f9c06c3a8b2b

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《python-EXCEL处理工具openpyxl快速入门1简介
   

还没有人抢沙发呢~