返回日记本

python读取、修改excle openpyxl2.5

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)

 

Python代码  # -*- 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  # -*- 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出来的模块名都带了版本号,之前在网上抄代码的时候经常报错,很多时候都是因为代码和模块版本不对称导致。


原文章浏览量:2197

原文章分类:编程语言

原文链接:https://www.iteye.com/blog/lizhiyu-2408253