赵乾舟 发表于 2022-1-27 17:48:47

字符串拆分与合并案例--汇总多表中不规范数据


需求,将四个季度,每个人的业绩汇总到一个新工作表,如下图所示

思路:循环每个季度的工作表ws,然后再循环每一行的数据,将B列拆分,求和,再与姓名拼接,然后将四个季度的数据写入新表。
知识点:其中int(ws.name),做了一个巧妙运用,将表明中的季度数字截取出来,然后转换成数字,作为写入新表的行号,做了一个简单的循环。
先上书中代码:
import xlrd,xlwt #导入读取和新建Excel的库。
wb=xlrd.open_workbook('Chapter-4-14-1.xls') #读取工作簿。
nwb=xlwt.Workbook('utf-8') #新建工作簿。
nws=nwb.add_sheet('统计结果') #新建工作表。
nws.write(0,0,'季度') #在新建的工作表中写入'季度'标题。
nws.write(0,1,'统计结果') #在新建的工作表中写入'统计结果'标题。
nums=0 #初始化nums为0。
lst=[] #初始化lst为空列表,便于存放汇总结果。
for ws in wb.sheets(): #循环读取ws工作簿下的每个工作表。
    for row_num in range(1,ws.nrows): #循环读取每个工作表中行号。
      name=ws.cell_value(row_num,0) #读取A列中的姓名。
      num=ws.cell_value(row_num,1) #读取B列中的业绩。
      for n in num.split('、'): #对B列单元格中的业绩进行拆分。
            nums +=int(n) #转换拆分的数字为整型,然后累加到nums变量。
      lst += #将姓名与nums结果连接,然后累加到lst列表。
      nums=0 #重置nums变量,便于下次循环时使用。
    nws.write(int(ws.name),0,ws.name) #将姓名写入新表A列。
    nws.write(int(ws.name),1,'\n'.join(lst)) #将每个人的总业绩合并,再写入新表B列。
    lst=[] #重复lst为空列表,便于统计下一个工作表数据时使用。
nwb.save('Chapter-4-14-2.xls') #保存新建的工作簿。我练习代码如下:
import xlrd,xlwt
wb = xlrd.open_workbook('Chapter-4-14-1.xls')
nwb = xlwt.Workbook('utf-8')
nws = nwb.add_sheet('sheet1')
nws.write(0,0,'季度')
nws.write(0,1,'结果')
for ws in wb.sheets():
    txt = ''
    for row in range(1,ws.nrows):
      sums = 0
      name = ws.cell_value(row,0)
      info = ws.cell_value(row,1)
      for i in info.split('、'):
            sums +=int(i)
      a = f'{name}:{sums};'
      txt +=a
    nws.write(int(ws.name),0,ws.name)
    nws.write(int(ws.name),1,txt)
nwb.save('a.xls')

页: [1]
查看完整版本: 字符串拆分与合并案例--汇总多表中不规范数据