前言 用
这些库都不如 OpenPyXL 强大, 安装 在终端中输入命令,如下: pip install openpyxl
由于最近天朝在召开两会,因此必须翻-墙才能安装。 使用方法 新建Excel表格 新建Excel表格,默认有一个名为 from openpyxl import Workbook
wb = Workbook() #创建文件对象 ws = wb.active #获取默认sheet
wb.save('sample.xlsx') 打开已有的Excel表格 对已有的Excel表格进行操作,如下:
新建/获取Sheet表格 使用 ws1 = wb.create_sheet('Mysheet') #默认在最后插入
ws2 = wb.create_sheet('Mysheet', 0) #在第一个位置插入
wb.remove(ws1) #删除sheet 也可以后期随时修改sheet的名字,如下:
修改sheet标签颜色,如下: ws.sheet_properties.tabColor = '1072BA' 若知道sheet的名字,可以用如下方式获取sheet :
也可获取全部sheet的名字,遍历sheet名字,如下: sheets = wb.sheetnames for sheet in sheets: print(sheets)
for sheet in wb: print sheet.title ['Sheet1', 'New Title', 'Sheet2'] 也可以定位到相应sheet页,[0]为sheet页索引,如下:
复制Sheet表格 仅能复制 source = wb.active target = wb.copy_worksheet(source) 操作单元格 由
获取区域内的单元格,如下: cell_range = ws['A1':'C2'] #获取A1-C2内的区域
colC = ws['C'] #获取第C列 col_range = ws['C:D'] #获取第C-D列 row10 = ws[10] #获取第10列 row_range = ws[5:10] #获取第5-10列 如果得到单元格,可以赋值,如下:
获取单元格的值,如下: cellValue = ws.cell(row=i, column=j).value 获取行列数,如下:
一行行的获取数据,如下: >>> 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> 一列列的获取数据,如下:
因为性能的原因, 获取所有的列或行,如下: rows = ws.rows
columns = ws.columns 因为性能的原因, 如果只想从worksheet中获取值,可以使用
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True): print(row) 保存文件 使用
获取单元格类型 from openpyxl import Workbook, load_workbook import datetime
wb = load_workbook('sample.xlsx')
ws=wb.active wb.guess_types = True #开启获取单元格类型
ws['A1']=datetime.datetime(2010, 7, 21) print ws['A1'].number_format
ws['A2']='12%' print ws['A2'].number_format
ws['A3']= 1.1 print ws['A4'].number_format
ws['A4']= '中国' print ws['A5'].number_format
wb.save('sample.xlsx')
# 执行结果: # yyyy-mm-dd h:mm:ss # 0% # General # General # 如果是常规,显示general,如果是数字,显示'0.00_ ',如果是百分数显示0% 使用公式
合并单元格 from openpyxl import Workbook, load_workbook
wb = load_workbook('sample.xlsx') ws1=wb.active
ws.merge_cells('A2:D2') ws.unmerge_cells('A2:D2') #合并后的单元格,脚本单独执行拆分操作会报错,需要重新执行合并操作再拆分
# or equivalently ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4) ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)
wb.save('sample.xlsx') 插入一个图片 需要
from openpyxl import load_workbook from openpyxl.drawing.image import Image
wb = load_workbook('sample.xlsx') ws1=wb.active
img = Image('1.png') ws1.add_image(img, 'A1')
wb.save('sample.xlsx') 隐藏单元格
优化模式 在处理非常大的xlsx 文件时,openPyXL 的常规模式无法处理这种负载。幸运的是,有两种模式可以在(几乎)恒定内存消耗的情况下读写无限量的数据。from openpyxl import load_workbook wb = load_workbook(filename='large_file.xlsx', read_only=True) ws = wb['big_data']
for row in ws.rows: for cell in row: print(cell.value)
插入/删除行/列,移动区域单元格 插入行/列 在第7行之上插入一行,如下: ws.insert_rows(7) 在第7列的左边插入一列,如下:
删除行/列 从第6列开始,删除3列,即删除6、7、8列,如下: ws.delete_cols(6, 3) 移动区域单元格 将
如果区域内包含 ws.move_range('G4:H10', rows=1, cols=1, translate=True) 注释
读注释,如下:
写注释,如下: comment = Comment('Text', 'Author') comment.width = 300 # 设置宽度 comment.height = 50 # 设置高度 ws['A1'].comment = comment ws['B2'].comment = comment 表格样式 字体样式 字体名称、字体大小、字体颜色、加粗、斜体、纵向对齐方式(有三种:
字体颜色可以用 font = Font(color='FFBB00')
font = Font(color='FFFFBB00') 继承并重写样式,如下:
填充样式 详情请移步 填充样式 from openpyxl.styles import PatternFill
# fill_type 的样式为 None 或 solid cell2.fill = PatternFill(fill_type=cell1.fill.fill_type, fgColor=cell1.fill.fgColor) 边框样式 详情请移步 边框样式
对齐样式 horizontal 的值有: from openpyxl.styles import Alignment
alignment=Alignment(horizontal='general', vertical='bottom', text_rotation=0, wrap_text=False, shrink_to_fit=False, indent=0) 保护样式 锁定、隐藏
整行或整列应用样式 col = ws.column_dimensions['A'] col.font = Font(bold=True) row = ws.row_dimensions[1] row.font = Font(underline='single') 更改合并的单元格样式 合并的单元格可以想想成为左上角的那个单元格来操作。 筛选和排序
生成的Excel表格,有筛选排序的操作,但是没有实际表现出效果,如下图: 需要手动点击 密码保护 该功能仅能提供一个很基础的密码保护,没有进行加密处理,网上普通的破解软件都可以破解密码。不过,日常使用还是可以的。 该功能仅可用于新建excel表格,不能用于已存在的excel表格。 workbook工作薄保护 防止查看隐藏sheet,避免增加、移动、删除、隐藏或重命名sheet等操作,可以保护workbook的结构,如下: wb.security.workbookPassword = '...' wb.security.lockStructure = True worksheet保护 worksheet保护不需要密码,如下:
使用 Pandas 和 NumPy 详情请移步 Working with Pandas and NumPy 图表 图表由至少一个系列的一个或多个单元格区域数据点组成。更多内容请移步 图表介绍。 (点击文末“阅读全文”获取跳转外链) |
|