python小白玩脚本日记:
被python代码的简洁、易用、好上手打动,最近处理问题比较喜欢python。
语言是正经语言,只是解决异常、错误时候网上资料不是很丰满,经常会因一些小问题耽误时间。
相信也会有人遇到类似问题,这才捡起来了N年没维护的空间,给路人留下参考内容。
闲话少叙,hualili的分割线开始正题
-----------------------******************————————————————————————-------=======
需求:有业务部门经常会有不完整的EXCLE数据,需要我们来补充,重复过高且无技术含量的工作IT男不喜欢,写个功能给对方又涉及数据保密,好吧 ,自己写个省心的小脚本。
第一反应当然是找现成的模块导入,锁定了xlrd (1.1.0)+xlwt (1.3.0)+xlutils (2.0.0)
网上down了现成的代码搞了许久,终于调通。
what?!只能处理xls结尾的excle,你可知excle2007开始已经使用了xlsx,看来白研究了。
继续问度娘,锲而不舍的寻找让我发现了新的模块openpyxl (2.5.0b1),问题得以解决。
贴代码前介绍下excle结构,代码也是按这个顺序定位数据的:
由大到小 工作簿(workbook)-工作表(sheet)-单元格(cell)
# -*- coding: utf-8 -*-
# author lzy
# 2018年1月19日
from openpyxl import load_workbook
from conOracle import cxOracle
#获取数据库连接 铺垫
conn = cxOracle('user_name','password','linkname')
sql = "SELECT code,name FROM table1 WHERE code IS NOT NULL"
rs = conn.Query(sql)
d = {}
for k, v in rs:
d[k]=v
#excle处理
wb = load_workbook("E:\python_test\excle_rw\ceshi.xlsx") #加载已存在EXCLE
ws=wb.worksheets[0] #找到对应sheet页 此处根据index寻找
for i in range(2,ws.max_row+1): #excle包含表头 从第二行开始遍历
ws.cell(row=i,column=5).value = d[ws.cell(row=i,column=2).value] 根据第2列的值去字典中查找value更新第五列
wb.save("E:\python_test\excle_rw\ceshi.xlsx") #保存EXCLE
大家有发现没,文章里pao出来的模块名都带了版本号,之前在网上抄代码的时候经常报错,很多时候都是因为代码和模块版本不对称导致。