python中的openpyxl模块可以操作excel文件。
使用pip安装pip install openpyxl
支持流行的lxml库(如果已安装)。这在创建大文件时特别有用。
为了能够将图像(jpeg,png,bmp等)包含到文件中,需要安装'pillow'库:pip install pillow
1、创建一个excel对象
import openpyxl
wb=openpyxl.Workbook() #创建一个新的空白excel对象
wb=openpyxl.load_workbook('file_name.xlsx') # 打开一个已存在的文件
获取打开的excel对象中所有的工作表(新的空白excel对象默认有一个名称为"Sheet"的工作表):
1>wb.sheetnames:获取所有工作表的名称的列表
2>for sheet in wb:
print(sheet.title)
2、创建新的工作表
wb.create_sheet(title=None, index=None)
title为新创建的工作表名称
index为新的工作表插入的位置,默认插到末尾
3、打开工作表
ws=wb.active #打开第一个工作表对象
ws=wb[titme] #工作表的title可以作为key进行索引
ws=wb.get_sheet_by_name(title) #通过工作表的title打开
获取最大行,最大列
sheet.max_row
sheet.max_column
设置行高和列宽:
ws.row_dimensions[rowx].height = height_num
ws.column_dimensions['C'].width = width_num
合并和拆分单元格:
merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
方法1:ws.merge_cells('A1:C3') #合并一个矩形区域中的单元格
方法2:ws.merge_cells(start_row=None, start_column=None, end_row=None, end_column=None)
由于省略了第一个参数,后面的参数要使用关键字
merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
使用方法同上
改变工作表按钮颜色
ws.sheet_properties.tabColor = "1072BA"
删除工作表
wb.remove(sheet)
del wb[sheet_name]
4、读取或修改单元格
4.1:单一单元格
cl1= ws['B6'] #直接通过索引获取单元格对象
cl2 = ws.cell(rowx, colx, value=None) #通过行和列获取单元格对象,如果提供了value值,则同时更改该单元格值
获取到单元格对象之后通过属性column、row、is_date、font、value、aligment、border等属性获取和修改相关值
设置字体样式:
ws['B6'].font=openpyxl.styles.Font(name='字体名称',size=数字字号, italic=是否斜体, color='16进制颜色', bold=是否加粗)
设置文字对齐方式:
ws['B6'].alignment=openpyxl.styles.Alignment(horizontal="水平对齐",vertical="垂直对齐",text_rotation=旋转角度,wrap_text=是否自动换行)
horizontal可能的值:左对齐left、居中center、右对齐right、分散对齐distributed、跨列居中centerContinuous、两端对齐justify、填充fill、常规general
vertical可能的值:居中center、还可以靠上top、靠下bottom、两端对齐justify、分散对齐distributed
wrap_text参数还可以写成wrapText
设置单元格边框样式:
side1=openpyxl.styles.Side(style="dotted",color="16进制颜色")
side2=openpyxl.styles.Side(style="thin",color="16进制颜色")
style可能的值'double', 'dashed', 'medium', 'dashDot', 'dashDotDot', 'mediumDashed', 'thin', 'thick', 'slantDashDot', 'hair', 'mediumDashDotDot', 'mediumDashDot', 'dotted'
ws['B6'].border = openpyxl.styles.Border(left=side1,right=side1,top=side2,bottom=side2)
4.2:多单元格
cell_list1 = ws['A1':'C2'] #使用类似切片的方式获取所有单元格对象列表
cell_list2 = ws['C'] # 获取C列(第三)列的所有单元格对象列表
cell_list3 = ws['C:E'] # 获取C列到E列(C列、D列、E列)的所有单元格对象列表
cell_list4 = ws[10] #获取第10行的所有单元格对象列表
cell_list5 = ws[5:10] #获取第5行到第10行的所有单元格对象列表
cell_list6 = ws.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
返回指定范围的所有单元格对象,返回格式中每行为一个元祖,然后由这些元祖组成列表,min_*不提供默认为1
4.3:获取所有单元格
all_sell1=ws.rows #返回所有单元格对象,返回格式中每行为一个元祖,然后由这些元祖组成列表
all_sell2=ws.columns #返回所有单元格对象,返回格式中每列为一个元祖,然后由这些元祖组成列表
5、保存成文件
wb.save('file_name.xlsx')
其他操作
1、添加一行到当前sheet的最底部
append(['This is A1', 'This is B1', 'This is C1'])
如果是list,将list从头到尾顺序添加
append({'A' : 'This is A1', 'C' : 'This is C1'})
如果是dict,按照相应的键添加相应的键值
2、根据列数字得到字母,根据字母得到列数字
openpyxl.utils.get_column_letter(num)
openpyxl.utils.column_index_from_string(str)
最后编辑:2020-03-04作者:qingheluo
这个作者貌似有点懒,什么都没有留下。