利用 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 Server on Linux
本文参考并翻译自:微软云计算与企业执行副总裁Scott Guthrie的博客. 过去的一年,不管是对于微软的数据业务,还是整个行业,都是令人惊喜的一年.在周四刚于纽约举行的Data Driven活动中 ...
- LeetCode-Container With Most Water-zz
先上代码. #include <iostream> #include <vector> #include <algorithm> using namespace s ...
- Python初学者第一天 Python安装及第一个Python程序
Python基础: 1day: 1.Python基础: A.编程语言介绍: a. 计算机只能理解0和1.编程即写一段按照一定规则写代码,让计算机帮你干活: b.机器语言:最底层的语言, ...
- GetDIBits 提示堆栈损坏的解决办法
...... BITMAPINFOHEADER bi; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bmpScreen.bmWidth; bi ...
- yii2.0表单自带验证码
Yii2.0的自带的验证依赖于GD2或者ImageMagick扩展. 使用步骤如下: 第一步,控制器: 在任意controller里面重写方法
- awrsqrpt.sql简介
ORACLE_HOME/RDBMS/admin/awrsqrpt.sql 这个脚本可以很方便地取出某个sql在某两个快照间隔内,消耗cpu时间,执行次数,逻辑读,物理读,sql的执行计划以及sql的 ...
- Hibernate初探之一对多映射 及 myeclipse自动生成hibernate文件方法
实现单向一对多: 1)在one方的实体中添加保存many方的集合 2)在one方的配置文件中添加<one-to-many>配置 实现单向多对一: 1)在many方的实体中添加one方的引用 ...
- July 06th 2017 Week 27th Thursday
Knowledge is the antidote to fear. 知识可以解除恐惧. Fear always steps from unknown things. Once we know wha ...
- postgresql+postgis+pgrouting实现最短路径查询(3)--流程图
项目结束,做一个项目的总结汇报,就把最短路径查询的实现流程图画了一下,现在补出来:
- SSH2整合需要jar包解释
hibernate3.jar, Hibernate的库,必须使用的jar包 antlr-2.7.6.jar, 语法分析生成器 语言转换工具,hibernate利用它实现HQL到SQL的转换 cglib ...