python使用openpyxl操作execl
? ? openpyxlopenpyxl可以用来对excel进行操作,但只能操作xlsx文件而不能操作xls文件。 主要用到三个概念:Workbooks,Sheets,Cells。 ? 读取与创建读取Workbooks 可以导入openpyxl.load_workbook()来打开一个已经存在的workbook: >>> from openpyxl import load_workbook >>> wb2 = load_workbook(‘test.xlsx‘) >>> print wb2.get_sheet_names() [‘Sheet2‘,‘New Title‘,‘Sheet1‘] 创建Workbooks与Sheets 在刚开始使用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‘,‘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就是一个单元格) >>> 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) <Cell Sheet1.A1> <Cell Sheet1.B1> <Cell Sheet1.C1> <Cell Sheet1.A2> <Cell Sheet1.B2> <Cell Sheet1.C2> 相似的方法openpyxl.worksheet.Worksheet.iter_cols()也可以: >>> for col in ws.iter_cols(min_row=1,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> 如果你想迭代一个文件的所有行或列,可以使用openpyxl.worksheet.Worksheet.rows()这个属性: >>> 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>)) 或者openpyxl.worksheet.Worksheet.columns()这个属性: >>> 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>)) ?
|