使用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')

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设需要计算时间数据在excel表格的A列中,可以使用openpyxl来读取excel数据并计算相邻行之间的时间差。 首先需要安装openpyxl: ``` pip install openpyxl ``` 然后可以使用以下代码计算时间差: ```python from openpyxl import load_workbook from datetime import datetime, timedelta # 打开excel文件 workbook = load_workbook(filename='example.xlsx') # 选择第一个工作表 worksheet = workbook.active # 遍历每一行,计算相邻行之间的时间差 for i in range(2, worksheet.max_row + 1): # 获取当前行和上一行的时间数据 current_time = worksheet.cell(row=i, column=1).value previous_time = worksheet.cell(row=i-1, column=1).value # 将时间数据转换为datetime类型 current_datetime = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') previous_datetime = datetime.strptime(previous_time, '%Y-%m-%d %H:%M:%S') # 计算时间差 time_diff = current_datetime - previous_datetime # 将时间差转换为秒数 seconds_diff = time_diff.total_seconds() # 将秒数转换为时间格式(小时:分钟:秒) time_diff_str = str(timedelta(seconds=seconds_diff)) # 将时间差写入excel表格的B列 worksheet.cell(row=i, column=2).value = time_diff_str # 保存修改后的excel文件 workbook.save(filename='example.xlsx') ``` 以上代码中,通过遍历每一行数据,获取当前行和上一行的时间数据,并将其转换为datetime类型。然后计算时间差,将时间差转换为秒数并转换为时间格式。最后将时间差写入excel表格的B列中。 需要注意的是,以上代码中假设时间数据的格式为"年-月-日 时:分:秒",如果实际数据格式不同,需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值