【整理】Python中,添加写⼊数据到已经存在的Excel的xls⽂件,即打开excel
⽂...
【整理】Python中,添加写⼊数据到已经存
在的Excel的xls⽂件,即打开excel⽂件,写
⼊新数据
2013 年 1 ⽉ 16 ⽇下午 1:22crifan已有2890⼈围观3个评论
背景
Python中,想要打开已经存在的excel的xls⽂件,然后在最后新的⼀⾏的数据。
折腾过程
1.到了参考资料:
writing to existing workbook using xlwt
其实是没有直接实现:
打开已有的excel⽂件,然后在⽂件最后写⼊,添加新数据
的函数的。
只不过,可以利⽤:
Working with Excel Files in Python
中的库,组合实现。
2. writing to existing workbook using xlwt
给出了⽰例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 py import copy # /pypi/xlutils
from xlrd import open_workbook # /pypi/xlrd
from xlwt import easyxf # /pypi/xlwt
START_ROW =297# 0 based (subtract 1 from excel row number)
col_age_november =1
col_summer1 =2
col_fall1 =3
rb =open_workbook(file_path,formatting_info=True)
r_sheet =rb.sheet_by_index(0) # read only copy to introspect the file
wb =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
for row_index in range(START_ROW, ws):
age_nov =ll(row_index, col_age_november).value
if age_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')
22wb.save(file_path +'.out'+os.path.splitext(file_path)[-1]) 3. 刚⼜看到,有更简洁的代码:
1 2 3 py import copy w =copy('book1.xls')
<_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中使⽤py出错:AttributeError: ‘module’ object has no attribute ‘copy’
9.后是:
【已解决】Python中使⽤xlutils的copy出错:AttributeError: ‘str’ object has no attribute
‘datemode’
10.后来是⽤如下代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31import xlwt;
import xlrd;
#import xlutils;
py import copy;
#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 = py(gConst['xls']['fileName']);
#newWb = copy(gConst['xls']['fileName']);
oldWb =xlrd.open_workbook(gConst['xls']['fileName']);
print oldWb; #<xlrd.book.Book object at 0x000000000315C940>
newWb =copy(oldWb);
print newWb; #<xlwt.Workbook.Workbook object at 0x000000000315F470> newWs =_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⽂件,
然后写⼊新数据的⽬的。
但是有个缺点,
第⼀次保存时的,带格式(标题内容为红⾊粗体)的内容:
old xls with format
重新写⼊新数据,再保存时,却丢失了之前的格式(标题没了红⾊粗体了):
rewrite one loss format
11.后来还是参考:
writing to existing workbook using xlwt
中的那个标准答案,在⽤xlrd.open_workbook时,添加对应的参数formatting_info=True,就可以保留原有格式了。
完整代码:
1
python怎么读取excel文件数据2 3 4 5 6 7 8 9 10 11 12 13import xlwt;
import xlrd;
#import xlutils;
py import copy;
#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);
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32ws.write(0, 1, "CatalogNumber", headerStyle);
ws.write(0, 2, "PartNumber",    headerStyle);
wb.save(gConst['xls']['fileName']);
#open existed xls file
#newWb = py(gConst['xls']['fileName']);
#newWb = copy(gConst['xls']['fileName']);
oldWb =xlrd.open_workbook(gConst['xls']['fileName'], formatting_info=True); print oldWb; #<xlrd.book.Book object at 0x000000000315C940>
newWb =copy(oldWb);
print newWb; #<xlwt.Workbook.Workbook object at 0x000000000315F470> newWs =_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
最后重新写⼊的数据,就可以保留之前的格式了(标题为红⾊粗体):
new one with format
总结
python中操作,本⾝就复杂的xls⽂件,还是有点⼩⿇烦的。
想要,往已经存在的xls⽂件中,写⼊新的⾏,新的数据,对应的逻辑为:
1. ⽤xlrd.open_workbook打开已有的xsl⽂件
注意添加参数formatting_info=True,得以保存之前数据的格式
2. 然后⽤,py import copy;,之后的copy去从打开的xlrd的Book变量中,拷贝
出⼀份,成为新的xlwt的Workbook变量
3. 然后对于xlwt的Workbook变量,就是正常的:
1. 通过get_sheet去获得对应的sheet
2. 拿到sheet变量后,就可以往sheet中,写⼊新的数据
4. 写完新数据后,最终save保存
相关完整代码为:
1
2 3 4import xlwt;
import xlrd;
#import xlutils;
py import copy;
5
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28styleBoldRed  =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 = py(gConst['xls']['fileName']);
#newWb = copy(gConst['xls']['fileName']);
oldWb =xlrd.open_workbook(gConst['xls']['fileName'], formatting_info=True); print oldWb; #<xlrd.book.Book object at 0x000000000315C940>
newWb =copy(oldWb);
print newWb; #<xlwt.Workbook.Workbook object at 0x000000000315F470> newWs =_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";
其中,关于如何下载和安装对应的库,可参考:
【记录】Python中⽣成(写⼊数据到)Excel⽂件中
【记录】Python中安装xlrd模块
【记录】Python中安装可以读写excel的xls⽂件的xlutils模块(需依赖于xlrd和xlwt)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。