一、需求分析
处理的需求是:对一个表格中,相同 问诊id 的数据进行合并:
1. 对话内容整理成,一人一句对话的方式
2.合并H列和I列,用 一个患者的最后结束问诊时间 减去 最初发起问诊的时间 , 计算出一个患者的总问诊时间
3.将处理结果,放到sheet2中, 并 保存为 另一个excel ,"result.xlsx"
二、代码实现
使用 python的 openpyxl 库 处理excel表格; 使用datetime库,进行时间计算。
import openpyxl
import datetime
#计算时长
def subtime(date1,date2):
date1=datetime.datetime.strptime(date1, "%Y-%m-%d %H:%M:%S")
date2=datetime.datetime.strptime(date2, "%Y-%m-%d %H:%M:%S")
return date2-date1
wb = openpyxl.load_workbook('11.6—11.10问诊对话.xlsm')
sheet = wb['11.6—11.10问诊对话(1)']
sheet2 = wb['Sheet2']
rows = sheet.max_row
columns = sheet.max_column
#制作结果表的 首行表头
for col in range(1, columns+1):
if col<=7:
sheet2.cell(1, col).value = sheet.cell(1, col).value
if col==8:
sheet2.cell(1, col).value ="问诊时间"
if col==9:
sheet2.cell(1, col).value ="对话内容"
#目标表 :计算问诊时间 合并对话
consult_id = None
consult_time = None
start_time = None
end_time = None
string_value = ''
new_row = 2
fist_time = 1
#记录首个问诊ID
last_consult_id = sheet.cell(2, 1).value
for row in range(2, rows+1):
consult_id = sheet.cell(row, 1).value
if consult_id != None:
# 如果是新的问诊id
if consult_id != last_consult_id:
fist_time = 1 # 重置 first_time的值
sheet2.cell(new_row, 9).value = string_value
# 计算问诊时间,存入到的第8列
if end_time!= None and start_time!= None:
consult_time = subtime(start_time, end_time)
sheet2.cell(new_row, 8).value = consult_time
new_row = new_row + 1 # 新开一行写信息
string_value =''
for col in range(1, columns+1):
if consult_id != None:
#写入 前七列 信息
if fist_time==1 and col<=7:
sheet2.cell(new_row, col).value = sheet.cell(row, col).value
#print(sheet.cell(row, col).value, col)
#发起问诊的时间
if col==8 and fist_time == 1:
if sheet.cell(row, col).value:
start_time = str(sheet.cell(row, col).value)
else:
start_time = None
#结束问诊的时间
if col == 9:
if sheet.cell(row, col).value:
end_time = str(sheet.cell(row, col).value)
else:
end_time = None
#写入对话内容
if col == 10:
string_value = str(string_value) + str(sheet.cell(row, col).value) + ":"
if col == 11:
string_value = string_value + str(sheet.cell(row, col).value) + "\n"
fist_time = fist_time + 1
last_consult_id = consult_id
wb.save('result.xlsx')