• 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页为单位进行处理

  • 相关阅读:
    hdu 4135 Co-prime (容斥定理)
    hdu 1509 Windows Message Queue (优先队列)
    poj 2104 K-th Number (划分树)
    hdu 1556 Color the ball (树状数组)
    海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
    使用MaxCompute Java SDK运行安全相关命令
    使用MaxCompute Java SDK 执行任务卡住了,怎么办?
    老代码多=过度耦合=if else?阿里巴巴工程师这样捋直老代码
    日志服务Python消费组实战(三):实时跨域监测多日志库数据
    如何限制用户仅通过HTTPS方式访问OSS?
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5453360.html
Copyright © 2020-2023  润新知