刚开始的时候以为只要用一个xlrd模块就能进行对xls的读写,后面查了半天才发现若只有xlrd这个模块只能对xls文件进行读取的操作,但是没办法写,下面这个是从网上直接拷贝过来的是可以对xls文件读写的,还能保存原来的一些xls文件样式等功能

这个是从网上找到的,直接拷贝过来:

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

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

  1. 用xlrd.open_workbook打开已有的xsl文件
    • 注意添加参数formatting_info=True,得以保存之前数据的格式
  2. 然后用,from xlutils.copy import copy;,之后的copy去从打开的xlrd的Book变量中,拷贝出一份,成为新的xlwt的Workbook变量
  3. 然后对于xlwt的Workbook变量,就是正常的:
    1. 通过get_sheet去获得对应的sheet
    2. 拿到sheet变量后,就可以往sheet中,写入新的数据
  4. 写完新数据后,最终save保存
  5. 最后再补上代码:
  6. # -*- coding:utf-8 -*-
    import xlwt;
    import xlrd;
    #import xlutils;
    from xlutils.copy import copy;
    # import urllib,sys
    # reload(sys)
    # sys.setdefaultencoding( "utf-8" )
    # 进行模版样式写入 
    # styleBoldRed	 = xlwt.easyxf('font: color-index red, bold on');
    # headerStyle = styleBoldRed;
    # wb = xlwt.Workbook();
    # ws = wb.add_sheet('sheet 1', cell_overwrite_ok=True);
    # ws.write(0, 0, "Header",		  headerStyle);
    # ws.write(0, 1, "CatalogNumber", headerStyle);
    # ws.write(0, 2, "PartNumber",	  headerStyle);
    # wb.save(r'C:Users\AdministratorDesktopaa.xls');
    # 在用xlrd.open_workbook时,添加对应的参数formatting_info=True,就可以保留原有格式了。 
    #open existed xls file
    #newWb = xlutils.copy(gConst['xls']['fileName']);
    #newWb = copy(gConst['xls']['fileName']);
    oldWb = xlrd.open_workbook(r'C:Users\AdministratorDesktopaa.xls', formatting_info=True);
    print oldWb; #<xlrd.book.Book object at 0x000000000315C940>
    newWb = copy(oldWb);
    print newWb; #<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");
    table = oldWb.sheets()[0]
    nrows = table.nrows
    ncols = table.ncols
    for rownum in range(1,nrows):
    	 row = table.row_values(rownum)
    	 if row:
    		app={}
    		for i in range(1,ncols+1):
    			app[i] = row[i-1] 
    		newWs.write(rownum,6,"sdf?sdf="+app[1]+"&sdf="+app[2]+"&sdfsdf="+app[3])
    print nrows
    print ncols
    print "write new values ok";
    newWb.save(r'C:Users\AdministratorDesktopaa.xls');
    print "save with same name ok";
    
  7. 这个是一段,然后再上只有读取功能的代码
  8. #xls读取部分
    # -*- coding: utf-8 -*- 
    import	xdrlib ,sys
    import xlrd
    reload(sys)
    sys.setdefaultencoding( "gbk" )
    
    def open_excel(file= r'C:UsersAdministratorDesktopaa.xls'):
    	try:
    		data = xlrd.open_workbook(file,formatting_info=True)
    		return data
    	except Exception,e:
    		print str(e)
    #根据索引获取Excel表格中的数据	 参数:file:Excel文件路径	   colnameindex:表头列名所在行的所以	,by_index:表的索引
    def excel_table_byindex(file= r'C:Users\AdministratorDesktopaa.xls',colnameindex=0,by_index=0):
    	data = open_excel(file)
    	table = data.sheets()[by_index]
    	nrows = table.nrows #行数
    	ncols = table.ncols #列数
    	colnames =	table.row_values(colnameindex) #某一行数据 
    	list =[]
    	for rownum in range(1,nrows):
    
    		 row = table.row_values(rownum)
    		 if row:
    			 app = {}
    			 for i in range(len(colnames)):
    				app[colnames[i]] = row[i] 
    				table.put_cell(rownum,i,1,"测试",1)
    			 list.append(app)
    	return list
    
    #根据名称获取Excel表格中的数据	 参数:file:Excel文件路径	   colnameindex:表头列名所在行的所以	,by_name:Sheet1名称
    def excel_table_byname(file= r'C:UsersAdministratorDesktopaa.xls',colnameindex=0,by_name=u'Sheet1'):
    	data = open_excel(file)
    	table = data.sheet_by_name(by_name)
    	nrows = table.nrows #行数 
    	colnames =	table.row_values(colnameindex) #某一行数据 
    	list =[]
    	for rownum in range(1,nrows):
    		 row = table.row_values(rownum)
    		 if row:
    			 app = {}
    			 for i in range(len(colnames)):
    				app[colnames[i]] = row[i]
    			 list.append(app)
    	return list
    
    def main():
       tables = excel_table_byindex()
       for row in tables:
    	   # print row
    	   for key in row:
    			print key+":"+row[key]
       # tables = excel_table_byname()
       # for row in tables:
    	   # print row
    
    if __name__=="__main__":
    	main()
    
  9. 再上一个写进xml的代码
  10. #xls写部分
    #encoding:utf-8		  #设置编码方式	 
    
    import xlwt	 
    wbk = xlwt.Workbook(encoding='utf-8', style_compression=0)	
    sheet = wbk.add_sheet('sheet 1', cell_overwrite_ok=True)  ##第二参数用于确认同一个cell单元是否可以重设值。  
    
    sheet.write(0,0,'some text')  
    sheet.write(9,9,'测试中文')   ##重新设置,需要cell_overwrite_ok=True	
    
    style = xlwt.XFStyle()	
    font = xlwt.Font()	
    font.name = 'Times New Roman'  
    font.bold = True  
    style.font = font  
    sheet.write(10, 10, 'some bold Times text', style)  
    
    wbk.save(r'C:UsersAdministratorDesktopaa.xls')	  ##该文件名必须存在
    
  11. 有什么不足之处的还可以进行补充!