乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>Python</em>怎么向xls追加信息

<em>Python</em>怎么向xls追加信息

作者:乔山办公网日期:

返回目录:excel表格制作


后缀是xlsx的文件也是excel文件,只不过是更高版本的excel文件;如果现在用的是2003版本的excel;只要下载2007-2013兼容包就可以正常打开了。

追加你应该用的是xlutils这个包当然那这个包是依赖xlrd和xlwt包的。

from xlrd import open_workbook
from xlutils.copy import copy
rb = open_workbook(xls_path)
wb = copy(rb)
sheet = wb.get_sheet(0)
然后你再sheet.write就可以了。。最后写完用wb.save(xls_path)就完成了追加和修改。

可以利用单元格的合并公式进行:假设在A列单元格的每一个后面增加”5“ =A1&5 然后利用单元格右下角的十字,往下拉即可

背景

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

给出了示例代码:

?

123456789101112819202122

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: ‘module’ object has no attribute ‘copy’

9.后是:

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

10.后来是用如下代码:

?

12345678910111281920212223242526272829303132

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,就可以保留原有格式了。

完整代码:

?

12345678910111281920212223242526272829303132

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文件中,写入新的行,新的数据,对应的逻辑为:

  • 用xlrd.open_workbook打开已有的xsl文件

  • 注意添加参数formatting_info=True,得以保存之前数据的格式

  • 然后用,from xlutils.copy import copy;,之后的copy去从打开的xlrd的Book变量中,拷贝出一份,成为新的xlwt的Workbook变量

  • 然后对于xlwt的Workbook变量,就是正常的e68a84e79fa5e98193332

  • 通过get_sheet去获得对应的sheet

  • 拿到sheet变量后,就可以往sheet中,写入新的数据

  • 写完新数据后,最终save保存

  • 相关完整代码为:

    ?

    123456789101112819202122232425262728
  •    
  • importxlwt;importxlrd;#import xlutils;fromxlutils.copy importcopy; 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";
  •    

相关阅读

  • <em>Python</em>怎么向xls追加信息

  • 乔山办公网excel表格制作
  • 后缀是xlsx的文件也是excel文件,只不过是更高版本的excel文件;如果现在用的是2003版本的excel;只要下载2007-2013兼容包就可以正常打开了。Python怎样给Excel 2007版以上的xlsx文件追..." src=
关键词不能为空
极力推荐
  • excel如何用公式根据当前时间自动生成编号

  • 以E列为辅助抄列,在E2单元格输入以下百公式,然后向下填充度公式=B2&C2然后在问A2单元格输入以下公式,并答向下填充公式="A_"&TEXT(SUMPRODUCT(1/COUNTIF(E$2:E2,E$2:E2)),"000")=TEXT(NOW(),"!GWyyyymmd

ppt怎么做_excel表格制作_office365_word文档_365办公网