创建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参数来返回单元格的值。
参考资料
- python测试开发项目实战-目录
- python工具书籍下载-持续更新
- python 3.7极速入门教程 - 目录
- 讨论qq群630011153 144081101
- 原文地址
- 本文涉及的python测试开发库 谢谢点赞!
- 本文相关海量书籍下载
数据存储
>>> 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存档管理器打开它。
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~