栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号