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任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...
随机推荐
- 学习11:内容# 1.函数名第一类对象及使用 ***** # 2.f格式化 *** # 3.迭代器 **** # 4.递归 ****
目录 1.第一类对象 -- 特殊点 2.f.格式化 Python3.6版本以上才能够使用 3.迭代器 迭代 : 器 : 工具 4.递归 1.第一类对象 -- 特殊点 1.可以当做值被赋值给变量 def ...
- HTML表单部分学习笔记
第一部分: <!-- action :指定处理提交表单的格式 method :指定提交表单的http方法 enctype:指明用来把表单提交给服务器时的互联网媒体形式 --> <fo ...
- 【拓扑排序】威虎山上的分配-C++
威虎山上的分配 描述 每年过年的时候,座山雕都会给兄弟们分银子,分银子之前,座山雕允许大伙儿发表意见,因为要是没法满足所有人的意见,指不定谁要搞出什么大新闻.不过每个人在提意见的时候只能说:" ...
- Python3安装与使用urllib2包之小坑
Python3 安装urllib2包之小坑 Python3.6.6或者说python3.x找不到urllib2语法问题修改之后,会报一个没有安装urllib2的包的错误. 通过pip install ...
- java优化之 单例模式的优化
该分类下的文章均为笔者阅读<Java程序性能优化>(葛一鸣)一书之所理解.如有欠缺,还请大佬们指点.
- C#3.0新增功能03 隐式类型本地变量
连载目录 [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...
- C#3.0新增功能04 扩展方法
连载目录 [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型 ...
- [LeetCode] 32. Longest Valid Parentheses (hard)
原题链接 题意: 寻找配对的(),并且返回最长可成功配对长度. 思路 配对的()必须是连续的,比如()((),最长长度为2:()(),最长长度为4. 解法一 dp: 利用dp记录以s[i]为终点时,最 ...
- [leetcode] 72. Edit Distance (hard)
原题 dp 利用二维数组dp[i][j]存储状态: 从字符串A的0~i位子字符串 到 字符串B的0~j位子字符串,最少需要几步.(每一次删增改都算1步) 所以可得边界状态dp[i][0]=i,dp[0 ...
- web页面保存图片到本地
web页生成分享海报功能踩坑经验 https://blog.csdn.net/candy_home/article/details/78424642 https://www.jianshu.com/p ...