使用python的openpyxl库 处理一个表格,计算时间差值

一、需求分析

处理的需求是:对一个表格中,相同 问诊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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值