利用 Python 插件 xlwings 读写 Excel
Python 通过 xlwings 读取 Excel 数据
去年底公司让我做设备管理,多次委婉拒绝,最终还是做了。其实我比较喜欢技术。做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Excel中填写数据,感觉特麻烦了,就写了这个自动化操作Excel的程序,以前要半天的工作量,用Python不到10s。程序比较简单,直接上程序。
# -*- 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')
利用 Python 插件 xlwings 读写 Excel的更多相关文章
- Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- 【转发】Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- Python用openpyxl读写Excel
openpyxl是一个用于读写Excel 2010 xlsx文件的python库.openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/ 一.安 ...
- python xlrd,xlwt 读写excel文件
python 读excel文件,需要xlrd库.下载地址:https://pypi.python.org/pypi/xlrd python 写excel文件,需要xlwt库.下载地址:https:// ...
- 用插件NPOI读写excel
1.用插件NPOIusing NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.UserModel; public class E ...
- Python用Pandas读写Excel
Pandas是python的一个数据分析包,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷地处理数据的函数和方法. Pandas官方文档 ...
- python 单元测试_读写Excel及配置文件(八)
一.安装openpyxl模块 openpyxl模块:是用于解决Excel(WPS等均可使用)中扩展名为xlsx/xlsm/xltx/xltm的文件读写的第三方库.xls文件要使用xlwt .wlrd两 ...
- 利用NPOI开源的读写Excel、WORD等微软OLE2组件读写execl,控制样式或单元格
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Python 使用 xlwings 往 excel 中写入一行数据的两种方法
该方法跟上一篇写入一列的方法相反,代码如下: # -*- coding:utf-8 -*- import xlwings as xw list1 = [1,2,3,4,5] list2 = [[1], ...
随机推荐
- SQL删除多列语句的写法
SQL删除表中多个列的写法: ALTER TABLE table_name DROP COLUMN COLUMN1,COLUMN COLUMN2,COLUMN COLUMN3 ……
- SVNKit学习——Setting Up A Subversion Repository 创建仓库(三)
所谓Setting Up A Subversion Repository,就是在Subversion所在的服务器上创建一个仓库,说白了就是在磁盘上建一个特殊的目录,这里我以windows举例. 1.使 ...
- Infragist ics Ult imate 2015 Vol.1 - Product Keys
Ultimate ProductKeys 2015 Vol.1: 9122-1900164-4504144 9122-9300855-3994197 9122-7600717-4579130 9122 ...
- Linux 服务器性能问题排查思路
一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...
- Carbon中文使用手册
Introduction Carbon 继承了PHP的 Datetime 类和JsonSerialiable.所以 Carbon 中没有涉及到的,但在 Datetime 和JsonSerializab ...
- 用jquery实现的简单数据双向绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- backtrack渗透测试中常用的命令总结
ping 域名/ip 测试本机到远端主机是否联通. dig 域名/ip 查看域名解析的详细信息. host -l 域名 dns服务器 传输zone. 扫描 nmap: -sS 半开扫描TCP和SYN扫 ...
- Yii日志使用
Yii 提供了一个灵活可扩展的日志功能.记录的日志 可以通过日志级别和信息分类进行归类.通过使用 级别和分类过滤器,所选的信息还可以进一步路由到 不同的目的地,例如一个文件,Email,浏览器窗口等. ...
- c++由string组成的struct初始化崩溃
struct _UserInfo { string username; string password; string ip; string port; } _UserInfo str={}; 这样就 ...
- SQL表创建注意事项
CREATE TABLE V_USER ( AUTOID ), USERID BYTE) NOT NULL, USERNAME BYTE) NOT NULL, USERPASSWORD BYTE) N ...