问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python怎样给Excel 2007版以上的xlsx文件追加数据

发布网友 发布时间:2022-04-23 14:09

我来回答

1个回答

热心网友 时间:2022-04-18 05:15

背景

Python中,xlrd主要用来读取excel文件, xlwt主要用来写文件,本文主要介绍打开已经存在的excel的xls文件,然后在最后新的一行的数据。要用到xlutils包,它依赖于前两个包。

折腾过程

1.找到了参考资料:

writing to existing workbook using xlwt

其实是没有直接实现:

打开已有的excel文件,然后在文件最后写入,添加新数据

的函数的。

只不过,可以利用:

Working with Excel Files in Python

中的库,组合实现。

2. writing to existing workbook using xlwt

给出了示例代码:

?

12345678910111213141516171819202122

rom xlutils.copy importcopy fromxlrd importopen_workbook fromxlwt importeasyxf  START_ROW =297  # 0 based (subtract 1 from excel row number)col_age_november =1col_summer1 =2col_fall1 =3 rb =open_workbook(file_path,formatting_info=True)r_sheet =rb.sheet_by_index(0) # read only copy to introspect the filewb =copy(rb) # a writable copy (I can't read values out of this, only write to it)w_sheet =wb.get_sheet(0) # the sheet to write to within the writable copy forrow_index inrange(START_ROW, r_sheet.nrows):    age_nov =r_sheet.cell(row_index, col_age_november).value    ifage_nov ==3:        #If 3, then Combo I 3-4 year old  for both summer1 and fall1        w_sheet.write(row_index, col_summer1, 'Combo I 3-4 year old')        w_sheet.write(row_index, col_fall1, 'Combo I 3-4 year old') wb.save(file_path +'.out'  +  os.path.splitext(file_path)[-1])

3. 刚又看到,有更简洁的代码:

?

1234

fromxlutils.copy importcopyw =copy('book1.xls')w.get_sheet(0).write(0,0,"foo")w.save('book2.xls')

4.现在打算去试试。

先去安装xlrd:

【记录】Python中安装xlrd模块

6.再去安装xlutils:

【记录】Python中安装可以读写excel的xls文件的xlutils模块(需依赖于xlrd和xlwt)

7.接着可以去写代码了。

8.先是:

【已解决】Python中使用xlutils.copy出错:AttributeError: ‘mole’ object has no attribute ‘copy’

9.后是:

【已解决】Python中使用xlutils的copy出错:AttributeError: ‘str’ object has no attribute ‘datemode’

10.后来是用如下代码:

?

1234567891011121314151617181920212223242526272829303132

importxlwt;importxlrd;#import xlutils;fromxlutils.copy importcopy; #init xls file#styleBlueBkg= xlwt.easyxf('pattern: pattern solid, fore_colour sky_blue;');#styleBold   = xlwt.easyxf('font: bold on');styleBoldRed   =xlwt.easyxf('font: color-index red, bold on');headerStyle =styleBoldRed;wb =xlwt.Workbook();ws =wb.add_sheet(gConst['xls']['sheetName']);ws.write(0, 0, "Header",        headerStyle);ws.write(0, 1, "CatalogNumber", headerStyle);ws.write(0, 2, "PartNumber",    headerStyle);wb.save(gConst['xls']['fileName']);  #open existed xls file#newWb = xlutils.copy(gConst['xls']['fileName']);#newWb = copy(gConst['xls']['fileName']);oldWb =xlrd.open_workbook(gConst['xls']['fileName']);printoldWb; #<xlrd.book.Book object at 0x000000000315C940>newWb =copy(oldWb);printnewWb; #<xlwt.Workbook.Workbook object at 0x000000000315F470>newWs =newWb.get_sheet(0);newWs.write(1, 0, "value1");newWs.write(1, 1, "value2");newWs.write(1, 2, "value3");print"write new values ok";newWb.save(gConst['xls']['fileName']);print"save with same name ok";

实现了,打开,刚刚保存的,已经存在的xls文件,

然后写入新数据的目的。

但是有个缺点,

第一次保存时的,带格式(标题内容为红色粗体)的内容:

重新写入新数据,再保存时,却丢失了之前的格式(标题没了红色粗体了):

11.后来还是参考:

writing to existing workbook using xlwt

中的那个标准答案,在用xlrd.open_workbook时,添加对应的参数formatting_info=True,就可以保留原有格式了。

完整代码:

?

1234567891011121314151617181920212223242526272829303132

importxlwt;importxlrd;#import xlutils;fromxlutils.copy importcopy; #init xls file#styleBlueBkg= xlwt.easyxf('pattern: pattern solid, fore_colour sky_blue;');#styleBold   = xlwt.easyxf('font: bold on');styleBoldRed   =xlwt.easyxf('font: color-index red, bold on');headerStyle =styleBoldRed;wb =xlwt.Workbook();ws =wb.add_sheet(gConst['xls']['sheetName']);ws.write(0, 0, "Header",        headerStyle);ws.write(0, 1, "CatalogNumber", headerStyle);ws.write(0, 2, "PartNumber",    headerStyle);wb.save(gConst['xls']['fileName']);  #open existed xls file#newWb = xlutils.copy(gConst['xls']['fileName']);#newWb = copy(gConst['xls']['fileName']);oldWb =xlrd.open_workbook(gConst['xls']['fileName'], formatting_info=True);printoldWb; #<xlrd.book.Book object at 0x000000000315C940>newWb =copy(oldWb);printnewWb; #<xlwt.Workbook.Workbook object at 0x000000000315F470>newWs =newWb.get_sheet(0);newWs.write(1, 0, "value1");newWs.write(1, 1, "value2");newWs.write(1, 2, "value3");print"write new values ok";newWb.save(gConst['xls']['fileName']);print"save with same name ok";

?

1

最后重新写入的数据,就可以保留之前的格式了(标题为红色粗体):

总结

python中操作,本身就复杂的xls文件,还是有点小麻烦的。

想要,往已经存在的xls文件中,写入新的行,新的数据,对应的逻辑为:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
强奸罪判多少年可以缓刑吗 20句充满着正能量的最励志的英语名言 如何通过cet-4? 去赤道几内亚,需要带什么行李,生活用品,在那边大概生活一年,什么东西... 去赤道几内亚需要准备什么?主要要预防什么疾病?要准备什么预防药品... 可惜!大部分消费者在交易后会取消亚马逊Prime会员资格 想问下 cpu i7 4900mq. gtx765m显卡. 32G内存 能大部分游戏效果开高么... i7 4800MQ i7 4900MQ 能有多大差别? 外星人14,显卡GTX765M。玩... 三星k2200打印机怎么升级 三星k2200打印机怎么升级br? 三星k2200打印机如何双面打? #Python 写文件 如何写文件时不清楚原文件,而且写在最前方? python在写入文件时的问题? Python如何读写文本文件 国米和拜仁的实力对比 Python怎样写入文件 按一定顺序说出这图片里面的所有球员名字。 关于python里写文件的操作 FIFA online2高手进,排阵 Python中的文件读写-理论知识 阿根廷对有哪些人 日本人の友达に日本语で书いた作文を直して? python 如何先清除文件内容,再追加写入? 这届世界杯阿根廷和西班牙哪个强 求一篇有关日本语言与文化的日语作文500字左右,简单点 谁能一口气说出20个著名足球球星的名字和所在国家? 手动挡倒车入库技巧 求关于日本文化的日语文章,最好带翻译 使用python编程,实现对txt文件中每行内容进行追加。 世界杯阿根廷国家队各球员的详细资料,大家有吗? 科目二“倒车入库”项目的左入库的技巧问题。 Python编写一个文件读写程序(命令行程序) python文件写操作 用Python写入文件,若该行数据存在则不写入;若不存在,则写入。怎么才能在... python可以同时对文件进行读写操作吗 关于python写入txt文本 用python将内容写入文件,写入数据出现重复多次,怎么办? 问: 那里能看环太平洋1啊?不要付钱的, 为何现代人越来越不喜欢看悲剧电影? 什么电影好看? 郝杰还拍电影吗 黄渤主演的电影杀生的评价如何 现在已经没有喜剧电影让我笑了,请推荐几部巨搞笑的电影 求最新搞笑电影(国语版的哦!) 2018好莱坞看什么? 一个关于女机器人的电影名字 《大话西游之大圣娶亲》当年票房仅20万,为何多年后却成为经典被人追捧? 关于时间的电影有几部 牧马人电影影评要专业一点,比如分析镜头,音乐什么的 印度女孩的结婚年龄大约在多少岁? 二十余里是几米