摘要:
Openpyxl是一个常用的python库,用于对Excel的常用格式及其模板进行数据读写等操作。
简介与安装openpyxl库
Openpyxl is a Python library for reading and writing Excel 2010 xlsx/xlsm/xltx/xltm files.
安装
pip install openpyxl
pillow:在文件中需要使用images (jpeg, png, bmp,...)时,需要安装pillow库。
注意:写操作时请关闭需要操作的excel文件,否则写不成功
加载xlsx操作内容
加载外部excel的xlsx步骤:
加载xlsx文件,获得该文件的句柄,为workbook
1
2
3
4
|
from openpyxl import load_workbook wb2 = load_workbook( 'test.xlsx' ) print wb2.get_sheet_names() # ['Sheet2', 'New Title', 'Sheet1'] |
在内存中新建workbook
创建 workbook
开始使用openpyxl,没有必要在文件系统上创建一个文件。
只需要导入Workbook类并开始使用它。可以把wordbook想象成一个excel文件。
1
2
3
4
|
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
1
2
|
ws1 = wb.create_sheet( "new_sheet_1" ) # 新建sheet,插入到最后(默认) ws2 = wb.create_sheet( "new_sheet_2" , 0 ) # 插入到最开始的位置 |
指定worksheet的名称
不指定sheet名称时,按照sheet,sheet1,sheet2自动增长
1
|
ws3 = wb.create_sheet() |
自定义worksheet名称,通过title属性指定名称,设置了sheet的名称
1
|
ws3.title = "new_sheet_3" |
输出wb现在所有的sheetname查看
通过 openpyxl.workbook.Workbook.sheetnames()
输出wb现在所有的sheetname
1
2
|
print wb.get_sheet_names() print (wb.sheetnames) |
循环
1
2
|
for sheet in wb: print (sheet.title) |
指定worksheet tab按钮的颜色
新建的sheet tab颜色为白色,可以另外指定sheet tab按钮的颜色
1
|
ws3.sheet_properties.tabColor = "1072BA" |
激活某个worksheet
通过worksheet名称激活某个sheet使用
名称看成workbook中的一个key
1
|
ws3 = wb[ "new_sheet_3" ] |
通过 _active_sheet_index 激活某个sheet使用
1
|
wb._active_sheet_index = 1 # 获取第二个sheet |
创建worksheet副本
使用 openpyxl.workbook.Workbook.copy_worksheet() 创建worksheet副本
1
2
|
source = wb.active target = wb.copy_worksheet(source) |
只能复制cell和style。不能复制工作表之间的工作簿。
操作单元格
当worksheet在内存中被创建时,是没有包含cells的,cells是在首次访问时创建
单元格可以看作是worksheet的key,通过key去访问单元格中的数据
1
2
3
4
5
6
|
c = ws[ 'A3' ] # 访问单元格,不存在则会自动创建一个 print c.value ws[ 'A4' ] = 'a4 value' # 指定单元格的值 print ws[ 'A4' ].value d = ws.cell(row = 4 , column = 2 , value = '通过cell指定' ) # 通过row column数字指定 print d.value |
循环在内存中创建cells
不用指定其值也可以在内存中创建
1
2
3
|
for i in range ( 1 , 10 ): for j in range ( 1 , 10 ): ws.cell(row = i, column = j) |
通过切片Ranges指定许多cells
1
|
cell_range = ws[ 'A1' : 'C2' ] |
也可以Ranges rows 或者columns
1
2
3
4
|
print ws[ 'C' ] print ws[ 'C:D' ] print ws[ 10 ] print ws[ 5 : 10 ] |
也可以使用iter_rows() 指定行->行,截止列
1
2
3
4
5
6
7
|
for row in ws.iter_rows(min_row = 1 , max_col = 3 , max_row = 2 ): for c in row: print (c) iter_cols() 指定列 - >列,截止行 for row in ws.iter_rows(min_row = 1 , max_col = 3 , max_row = 2 ): for c in row: print (c) |
遍历所有文件的行或列
1
2
3
|
ws[ 'C9' ] = 'hello world' tuple (ws.rows) # 转化成tuple方便for in操作 tuple (ws.columns) |
保存文件
1
2
|
wb = Workbook() wb.save( "assets/sample.xlsx" ) |
此操作将覆盖现有的文件没有警告。
所有的操作都需要保存到excel才能看见
保存为模板
指定属性 as_template=True ,就可以将文档保存为模板.xltx
1
2
3
|
wb = load_workbook( 'document.xlsx' ) wb.template = True wb.save( 'document_template.xltx' ) |
或者将该属性设置为False(默认),另存为一个文档:
1
2
3
|
wb = load_workbook( 'document_template.xltx' ) wb.template = False wb.save( 'document.xlsx' , as_template = False ) |
使用公式
1
2
3
4
|
wb = load\_workbook\( 'assets/sample.xlsx' \) ws = wb.active ws\[ "A5" \] = "=SUM\(2, 1\)" wb.save\( "assets/sample.xlsx" \) |
总结
以上所述是小编给大家介绍的python操作excel的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/for-you/p/9481869.html