zoukankan      html  css  js  c++  java
  • xlrd,xlwt操作Excel实例

    把有合并单元格的信息读取出来,输出所在层数与位置

    我要操作的Excel是这样的

    要的到的是这样的效果

    # -*- coding: utf-8 -*-
    import xlrd
    import xlwt
    r=1
    # shxrange = range(bk.nsheets)
    wb = xlwt.Workbook(encoding='utf-8')#创建工作簿,设置字符编码
    ws = wb.add_sheet('A TEST Sheet')#创建sheet
    
    goods = xlrd.open_workbook('test3.xlsx')#打开文件
    index = 0
    for sheet_index in range(goods.nsheets):
    	sh = goods.sheet_by_index(sheet_index)#返回第几页的对象
    	#添加内容到row_list当中
    	row_list = []
    	for rx in range(sh.nrows):
    		if sh.row(rx)[0].ctype:
    			print sh.row(rx)
    			row_list.append(sh.row_values(rx))
    	# 取出有多少行
    	row = len(row_list)
    	# print row
    	for r in range(row):
    		weizhi =1 
    		for c in range(len(row_list[r])):
    			if row_list[r][c]:
    				ws.write(index, 0, row_list[r][c])
    				ws.write(index,3,row)
    				ws.write(index,4,weizhi)
    				index = index + 1
    		row =row-1
    wb.save('example3.xls')
    

    需要这样操作的数据有很多,就要分为多个sheet页,每个sheet页包含一个要操作的数据,这样的话就可以把每个sheet页重新数层数,如果不需要也可以写在一个sheet页当中,要批量处理就分多个sheet页

    要处理的数据和上面差不多,不过稍微麻烦一点

    要处理的数据分为两个sheet页
    sheet页1

    sheet页2

    要处理的数据是通过sheet1页每个单元格数据*前面的第一个数字找到sheet2页对应的行号,这样的数据太难看了,想要得到这样的数据

    # -*- coding: utf-8 -*-
    import xlrd
    import xlwt
    r=1
    # shxrange = range(bk.nsheets)
    wb = xlwt.Workbook(encoding='utf-8')#创建工作簿,设置字符编码
    ws = wb.add_sheet('A TEST Sheet')#创建sheet
    
    goods = xlrd.open_workbook('test10.xlsx')#打开文件
    index = 0
    sheet = 0
    for sheet_index in range(goods.nsheets/2):
    	sh = goods.sheet_by_index(sheet)#返回第1页的对象
    	print sheet
    	#添加内容到row_list当中
    	row_list = []
    	for rx in range(sh.nrows):
    		#第一行为当前页的分类
    		if sh.row(rx)[0].ctype:
    			# print sh.row(rx)
    			row_list.append(sh.row_values(rx))
    		else:
    			# print r
    			r +=1
    	# 取出有多少行
    	row = len(row_list)
    	sheet = sheet+1
    	print sheet
    	#将第二页的内容添加到con_list当中
    	con_list = []
    	sh = goods.sheet_by_index(sheet)#返回第几页的对象
    	for rx in range(sh.nrows):
    		#第一行为当前页的分类
    		# if rx ==0:
    		# 	fenglei = sh.row_values(rx)
    		# else:
    		if sh.row(rx)[0].ctype:
    			# print sh.row(rx)
    			con_list.append(sh.row_values(rx))
    		else:
    			print r
    			r +=1
    	sheet=sheet+1
    	# print row
    	for r in range(row):
    		weizhi = 1
    		for c in range(len(row_list[r])):
    			if row_list[r][c]:
    				ws.write(index, 0, row_list[r][c])
    				# ws.write(index,10,fenglei)
    				ws.write(index,3,row)
    				ws.write(index,4,weizhi)
    				try:
    					ws.write(index,2,con_list[int(row_list[r][c].split("*")[0])-1][0])
    					try:
    						ws.write(index,5,con_list[int(row_list[r][c].split("*")[0])-1][1])
    					except:
    						ws.write(index,5,500)
    					try:
    						ws.write(index,6,con_list[int(row_list[r][c].split("*")[0])-1][2])
    					except:
    						ws.write(index,6,500)
    
    					ws.write(index,7,row_list[r][c].split("*")[1])
    					ws.write(index,8,row_list[r][c].split("*")[2])
    					ws.write(index,9,'hgyingliao'+str(sheet))
    				except:
    					ws.write(index,5,500)
    					ws.write(index,6,500)
    					ws.write(index,7,500)
    					ws.write(index,8,500)
    					ws.write(index,9,'hgyingliao'+str(sheet))
    				weizhi =weizhi+1
    				index = index + 1
    		row =row-1
    wb.save('example3.xls')
    

    每两个sheet页为单位进行处理

  • 相关阅读:
    V-Ray Material Library材质名称翻译
    3dMax常用快捷键
    3dMax笔记(韵湖)
    background-size拉伸背景图片
    CSS实现子元素水平垂直居中的6种方式
    JS简易实现“最小栈”
    JS种Array原型方法reverse的模拟实现
    JS数组去重的3种方式
    encodeURIComponent和encodeURI有什么区别
    CSS中的度量单位(px/em/rem/vm/vh/...)
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5453360.html
Copyright © 2011-2022 走看看