python excel插件_利用 Python 插件 xlwings 读写 Excel

Python 通过 xlwings 读取 Excel 数据

程序比较简单,直接上程序。

# -*- coding: utf-8 -*-

import xlwings as xw

import pandas as pd

from datetime import datetime

# 统计时间, 只有时间要改

START_TIME = '2018-07-01 00:00:00'

END_TIME = '2018-07-31 23:59:00'

START_ROW = 2 # 处理Excel文件开始行

END_ROW = 200 # 处理Excel结束行

# 天数 * 每天工作时间 * 分钟

WORK_TIME = 30 * 22 * 60

# 关键设备清单

key_machine = ['609', '610', '621', '622', '623', '624',

'627', '628', '636', '638', '667', '670', '675', '689']

persons = ['张三', '李四', '王五']

app = xw.App(visible=True, add_book=False)

wb_source = app.books.open('downTimeData.xls') # 打开Excel文件 downTimeData.xls

sheet = wb_source.sheets[0] # 选择第0个表单

# 需每月修改时间

start_datetime = datetime.strptime(START_TIME, '%Y-%m-%d %H:%M:%S') # 把开始统计时间转换为DateTime

end_datetime = datetime.strptime(END_TIME, '%Y-%m-%d %H:%M:%S') # 把结束统计时间转换为DateTime

result = []

for row in range(START_ROW, END_ROW):

row_content = []

row_str = str(row)

time_str = sheet.range('C' + row_str).value.strip()

create_datetime = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')

if start_datetime <= create_datetime <= end_datetime:

machine = sheet.range('A' + row_str).value

machine_number = machine[-4:-1]

if machine_number in key_machine:

if sheet.range('G' + row_str).value.strip() in persons:

row_content.append(machine_number)

row_content.append(create_datetime)

response_time_str = sheet.range('D' + row_str).value

complete_time_str = sheet.range('E' + row_str).value

row_content.append(response_time_str + complete_time_str)

solution_str = sheet.range('H' + row_str).value.strip()

row_content.append(solution_str)

comments = sheet.range('I' + row_str).value.strip()

row_content.append(comments)

result.append(row_content)

# count the times and downtime on the same machine and put it in dictionary

# 统计每台设备的停机次数

dict_result = {}

for _, [name, _, downtime, _, _] in enumerate(result):

if name in dict_result:

dict_result[name] = (dict_result[name][0] + 1,

dict_result[name][1] + downtime)

else:

dict_result[name] = (1, downtime)

# fill the result and write it on excel

target_name = START_TIME[5:7]

wb_target = app.books.open('analysis2018.xlsx') # 打开Excel文件,把结果写入

index = 3

for key in key_machine:

if key not in dict_result:

wb_target.sheets[target_name].range('B' + str(index)).value = 0

wb_target.sheets[target_name].range('C' + str(index)).value = 0

wb_target.sheets[target_name].range('D' + str(index)).value = WORK_TIME

wb_target.sheets[target_name].range('E' + str(index)).value = 0

wb_target.sheets[target_name].range('F' + str(index)).value = 0

else:

wb_target.sheets[target_name].range(

'B' + str(index)).value = dict_result[key][0]

wb_target.sheets[target_name].range(

'C' + str(index)).value = dict_result[key][1]

wb_target.sheets[target_name].range(

'D' + str(index)).value = (WORK_TIME - dict_result[key][1]) / dict_result[key][0]

wb_target.sheets[target_name].range(

'E' + str(index)).value = dict_result[key][1] / dict_result[key][0]

wb_target.sheets[target_name].range(

'F' + str(index)).value = dict_result[key][1] / WORK_TIME

index += 1

# write the comment and solution on excel

result.sort() # 故障信息排序,用于最后输出

df = pd.DataFrame(result, columns=['编号',

'故障时间',

'停机时间', '解决方案', '备注'])

wb_target.sheets[target_name].range('H2').value = df

wb_target.sheets[target_name].autofit('c')

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值