python编辑已存在的excel坑: BadZipFile: File is not a zip file
背景-原代码如下,期望能自动创建excel,并且可以反复调用编辑:
import xlwt,os
from openpyxl.styles import Font, colors class Write_excel(object):
"""修改excel数据""" def __init__(self, filename):
self.filename = filename def write(self, row_n, col_n, value):
wb=xlwt.Workbook()
sh=wb.add_sheet('Sheet1',cell_overwrite_ok=True)
red_style = xlwt.easyxf("font:colour_index red;")
green_style = xlwt.easyxf("font:colour_index green;")
# 判断值为错误时添加字体样式
if value in ['FAIL', 'ERROR'] or col_n == 12:
sh.write(row_n - 1, col_n - 1, value, red_style)
elif value == 'PASS':
ft = Font(color=colors.GREEN)
sh.write(row_n - 1, col_n - 1, value, green_style)
else:
sh.write(row_n - 1, col_n - 1, value)
wb.save(self.filename) if __name__ == "__main__":
wt = Write_excel("test111.xlsx")
wt.write(1, 1, "FAIL")
wt.write(2, 1, "PASS")
逻辑:使用xlwt模块创建excel,然后编辑内容,保存。
实际结果:仅保留最后一次写入结果。前一次的写入结果未能保存延续下来。
尝试调整方案-解决思路:创建excel前加入判断os.path.exsits(file_name),表格已存在时直接打开编辑,不存在时才创建。
def write(i,j,value,filename):
if not os.path.exists(filename):
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('sheet 1')
sheet.write(i,j,value)
wbk.save(filename)
else:
wb=load_workbook(filename)
sh =wb['Sheet1']
sh.cell(i,j).value=value
wb.save(filename)
write(1,1,'test text','test111.xlsx')
write(2,1,'test text','test111.xlsx')
实际结果报错:zipfile.BadZipFile: File is not a zip file,反复尝试过程中发现,我们在代码里创建的excel打开显示受损无法再次编辑,而在路径下手动创建的test111.xlsx就不会有这个问题。百度了下,搜索内容也不少,估计新手小白都碰到过。
为了能反复编辑已存在的excel文件并保存,需要xlwt、xlrd、xlutils组合起来使用,代码如下:
import xlwt,os,xlrd
from xlutils.copy import copy class Do_Excel:
def __init__(self,filename,sheetname='Sheet1'):
self.filename=filename
self.sheetname=sheetname
#读取excel,该部分可忽略
def excel_read(self,x, y):
data = xlrd.open_workbook(self.filename)
table = data.sheet_by_name(self.sheetname)
return table.cell(x, y).value
#判断excel文件是否存在,不存在则创建,存在则直接打开编辑
def excel_create(self):
if not os.path.exists(self.filename):
data = xlwt.Workbook()
table = data.add_sheet(self.sheetname)
table.write(0, 0, 'id')
data.save(self.filename)
#综合xlwt/xlrd/xlutils.copy,读写excel
def write(self,i,j,value):
self.excel_create()
rb = xlrd.open_workbook(self.filename)
wb = copy(rb) #管道作用,通过get_sheet()获取的sheet有write()方法
ws = wb.get_sheet(0) #1代表是写到第几个工作表里,从0开始算是第一个。
ws.write(i, j, value) wb.save(self.filename)
Do_Excel('test111.xlsx').write(1,1,'sdcds')
Do_Excel('test111.xlsx').write(1,2,'ewewe')
再尝试多次调用,就都能写入保存成功了。
解决办法二:直接使用openpyxl的Workbook和load_workbook,简单直接
rom openpyxl import Workbook,load_workbook
import os class Do_Excel:
def __init__(self,filename,sheetname='Sheet1'):
self.filename=filename
self.sheetname=sheetname def write(self,i,j,value):
if not os.path.exists(self.filename):
wb = Workbook()
sh = wb.create_sheet(self.sheetname)
else:
wb = load_workbook(self.filename)
sh = wb[self.sheetname]
sh.cell(i,j).value=value
wb.save(self.filename) Do_Excel('test222.xlsx').write(1,1,'sdcds')
Do_Excel('test222.xlsx').write(1,2,'change')
Do_Excel('test222.xlsx').write(3,2,'pass')
python编辑已存在的excel坑: BadZipFile: File is not a zip file的更多相关文章
- python中使用openpyxl模块时报错: File is not a zip file
python中使用openpyxl模块时报错: File is not a zip file. 最大的原因就是不是真正的 xlsx文件, 如果是通过 库xlwt 新建的文件,或者是通过自己修改后缀名 ...
- zipfile.BadZipFile: File is not a zip file
zipfile.BadZipFile: File is not a zip file 出现这个问题一般是文件损坏的可能性比较大
- 使用openpyxl模块时出现错误: zipfile.BadZipFile: File is not a zip file
通过Pycharm工具新建一个xlsx文件. 再通过openpyxl模块读取该表时,报错: zipfile.BadZipFile: File is not a zip file 如下所示: 解决办法: ...
- Python常见报错 - 使用openpyxl模块时出现错误: zipfile.BadZipFile: File is not a zip file
背景 在pycharm项目下,有一个data.xlsx,主要用来存放接口测试用例数据的 要通过openpyxl库去读取data.xlsx,方法: openpyxl.load_workbook(path ...
- 基于Python的接口自动化-读写excel文件
引言 使用python进行接口测试时常常需要接口用例测试数据.断言接口功能.验证接口响应状态等,如果大量的接口测试用例脚本都将接口测试用例数据写在脚本文件中,这样写出来整个接口测试用例脚本代码将看起来 ...
- NPOI 2.0 教程(二):编辑既存的EXCEL文件
NPOI 2.0 教程(二):编辑既存的EXCEL文件 分类: C#技术 2014-03-11 15:40 993人阅读 评论(3) 收藏 举报 c#excelNPOI 转载请注明出处 http:// ...
- bootstrap-fileinput上传文件的插件使用总结----编辑已成功上传过的图片
http://plugins.krajee.com/file-plugin-methods-demo 具体操作 http://plugins.krajee.com/file-preview-manag ...
- pd.ExcelWriter(to_excel)保存结果到已存在的excel文件中
网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...
- 用Python的pandas框架操作Excel文件中的数据教程
用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...
随机推荐
- python函数知识三 函数名的使用、格式化、递归
12.函数名的使用 函数是第一类对象 函数名可以当做值被赋值给变量 def func(): print(1) return a = func print(func) print(a) a() 函数名可 ...
- 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能
GPS设备和手机LBS的兴起,在地理信息存储过程中,在程序.应用级别是需要用经纬度去定位,而在数据分析的级别,特别是省市区镇街的分析,用到的是人可识别的文本类型存储,从设备中采集下来的数据和人工维护的 ...
- Kafka API操作
Kafka API实战 环境准备 在eclipse中创建一个java工程 在工程的根目录创建一个lib文件夹 解压kafka安装包,将安装包libs目录下的jar包拷贝到工程的lib目录下,并buil ...
- C#中面向对象编程中的函数式编程详解
介绍 使用函数式编程来丰富面向对象编程的想法是陈旧的.将函数编程功能添加到面向对象的语言中会带来面向对象编程设计的好处. 一些旧的和不太老的语言,具有函数式编程和面向对象的编程: 例如,Smallta ...
- python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05
迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...
- ASP.NET Core 中的管道机制
首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...
- 六、SQL 多张表数据叠加到一个视图里面
1 create view vABC as select * from a,b,c where a.id = b.aid and b.id = c.bid ---------------------- ...
- C#中Thread.IsBackground 属性
Thread thread.IsBackground =true; //Gets or sets a value indicating whether or not a thread is a ba ...
- Vim、Linux、Shell、Idea、Git命令总结
目录 Vim 剪切 复制 shell idea centos Vim /名字 搜索关键词 :u 撤销上一次操作 v 进入可视模式(选中模式) 剪切 回到顶部 命令模式下的剪切 dd,删除一整行==剪切 ...
- shiro解析ini文件
来吧,看看shiro是怎么解析ini文件的,这里假设ini文件在classpath下,名字叫做shiro.ini Factory<org.apache.shiro.mgt.SecurityMan ...