1 execl的创建
import openpyxl
a=[['张三',23],['李四',25]]
wb = openpyxl.Workbook()
ws = wb.active
ws.title='练习'
ws['A1']='姓名'
ws['B1']='年龄'
for i in a:
ws.append(i)
wb.save('e.xlsx')
这样看的话,会顺序的输入到定制的表头中
还有就是,如果是这种 a=[[‘张三’,23],[‘李四’,25]]的形式,会自动的进行填充,emmm上图
a=[['张三',23],['李四',25]]
for i in a:
ws.append(i)
最后就是 openpyxl会把列表中的元素逐个添加进去,也就是说
a=[[‘张三’,23],[‘李四’,25]]
b=[‘张三’,23,‘李四’,25]
2 execl文件的读取
获取工作表的方法:
Wb.Get_sheet_names() 这种会经常报错。。。
Wb.Sheetnames
获取工作表中的sheet:
print(wb[‘软件名称 阳光惠生活’]) #这是工作表对象的形式
Wb.get_sheet_by_name(‘sheet’) #sheet确实存在 也是工作表的形式存在
但是这个目前版本好像已经过时,更多的是: 这是获取其中的具体内容,不是工作表形式
For i in rang(len(Wb.Sheetnames)):
Print(Wb.Sheetnames[i])
创建工作表:
Wb.create_sheet(title=’sas’,index=0)
new_sheet = wb.create_sheet('汇总')
提示一下:index如果等于0的话,会在最前面插入新建的表,不写的话,则是在最后插入
删除工作表:
提示必须传入工作表对象 这个样子<Worksheet “汇总”>
第一:wb.remove(wb[‘汇总’])
第二:del wb[‘汇总’]
定位单元格
wb = openpyxl.load_workbook('腾讯应用宝仿冒APP汇总.xlsx')
ws=wb['软件名称 云缴费']
c=ws['A2']
print(c.row) #第几行
print(c.column) #第几列
print(c.coordinate) #具体位置
Print(ws[‘A2’].value) #获得对应单元格的值
D=c.offset(2,0) #D的位置是距离C的两行0列的位置 向下偏移 向右偏移
D.Value
访问多个单元格,获取单元格内的值
for each_val in ws[‘A2’:‘C5’]: #注意这里是元组的形式 ws[‘A2’:‘C5’] 没法直接用.values
for each in each_val:
print(each.value,end=’ ‘)
print(’\n’)
最后说一遍,.value没法用在元组,只能是 <Cell ‘软件名称 云缴费’.A1>这种,也就是单个点的情况下可以使用,然后就不断地循环,直到可以用到单个点
这也是获取多个单元格内容
for i in ws.rows:
#print(i) #元组 (<Cell '软件名称 云缴费'.A1>)
#print(i[0]) # Cell <Cell '软件名称 云缴费'.A1>
for h in i:
print(h.value,end=' ')
print('\n')
for each_row in ws.iter_rows(min_row=2,min_col=1,max_row=4,max_col=3):
Print(each_row[0].value)
这个是获得哪哪哪的元素,要获得具体的值,还是要得到最小的点位数
拷贝工作表
wb = openpyxl.load_workbook('腾讯应用宝仿冒APP汇总.xlsx')
ws=wb['软件名称 云缴费']
new=wb.copy_worksheet(ws) #ws是其中的一个工作表
new.title='第二个'
wb.save('腾讯应用宝仿冒APP汇总.xlsx')
3 个性化工作表标签栏
行高 列宽设置
wb = openpyxl.Workbook()
ws1 = wb.create_sheet('小甲鱼')
ws2 = wb.create_sheet('不二')
ws1.sheet_properties.tabColor = 'FF0000' #红色
ws2.sheet_properties.tabColor = '00FF00' #emmm颜色
row_dimensions[2] 修改第二行高度
Ws2.row_dimensions[2].height=100
column_dimensions[‘C’].width=50 修改C列宽度
融合单元格
ws1.merge_cells("A1:C3")
Ws1[‘A1’]=’love’
拆分单元格(拆分的范围与合并的范围一致)
ws1.unmerge_cells(‘A1:C3’)
冻结单元格(更好的查看数据)
要从要开始冻结的地方算起,也就是数据的第一位开始,看图
这里的话,就是从阳光生活冻结,也就是A2
wb = openpyxl.load_workbook('腾讯应用宝仿冒APP汇总.xlsx')
ws = wb.active
ws = wb['新的']
ws.freeze_panes = 'A2'
wb.save('腾讯应用宝仿冒APP汇总.xlsx')
解冻的话,就是freeze_panes=None
设置单元格字体
import openpyxl
from openpyxl.styles import Font
wb = openpyxl.load_workbook('腾讯应用宝仿冒APP汇总.xlsx')
new = wb.create_sheet('font')
new.column_dimensions['A'].width=50
new.row_dimensions[1].height=100
new['A1']='字体'
new['A1'].font=Font(bold=True,color='00FF00')
new['A2']='正常'
wb.save('腾讯应用宝仿冒APP汇总.xlsx')
4 数字格式问题
通过自定义格式来确定使用的方式
wb = openpyxl.Workbook()
ws = wb.active
ws.title = 'test'
ws['A1']=88.8
ws['A1'].number_format = '#,###.00育碧'
ws['A2'] = datetime.datetime.today()
ws['A2'].number_format = 'yyyy-mm-dd'
ws.column_dimensions['A'].width = 30
wb.save('qwe.xlsx')
5 设置字体的格式
Ws.number_format = “[=1]男;[=0]女”
Ws[‘A5’] = 0
通过设置 1 0 来代替男女
5execl函数公式
wb = openpyxl.load_workbook('练习.xlsx')
ws = wb['Sheet1']
center_alignment = Alignment(horizontal="center")
for row in ws.iter_rows(min_col=2,min_row=2,max_col=5,max_row=5):
ws[row[3].coordinate] = "=SUM(%s:%s)" % (row[0].coordinate,row[2].coordinate)
ws['F1']= '评分'
for row in ws.iter_rows(min_row=2,min_col=2,max_col=6,max_row=5):
ws[row[4].coordinate] = '=IF(%s>250,"A","B")' % (row[3].coordinate)
ws[row[4].coordinate].alignment = center_alignment #使其居中