前言
在UIPATH机器人开发中,读取用户发过来的Excel文件时,发现用户按模板提供的数据文件,有时候用户并不把旧数据删除,而是把旧数据隐藏,然后再填写上新数据。这样就导致重新读取了旧数据,有可能录入系统重复数据,拖慢系统执行效率。而UIPATH中EXCEL活动并没有发现能识别隐藏数据行的功能。
简述
介于上述问题,对于传统高级开发语言,处理EXCEL还是很强大的,所最这里选择的解决办法就是通过引用第三方程序来处理。UIPATH可引入VB脚本,Python脚本。这里选择Python脚本。
Python处理Excel的方法有很多,经过对比对于本文描述问题,使用win32com处理比较合适。
Excel的行列隐藏,实际上是对应的高度或宽度为0。于是可以通过读取行或列的高度或*宽度,判断是否为0来判断它是否是隐藏状态。
于是先安装win32com组件。
Pip install win32com
注意使用此控件时,一定要确保当前EXCEL是关闭状态,否则容易报异常。
步骤
- 引入控件:
Import win32com
From win32com.client import Dispatch, constants
Import os
- 创建处理函数
‘file_name:含有隐藏行的Excel文件
‘sheet_name:数据表单名
GetSupplerData(file_name, sheet_name=”Sheet1”)
- 返回结果
返回一个二维数据,保存读取到的Excel中未隐藏的所有数据。
- 代码
# -*- coding:utf-8 -*- import win32com from win32com.client import Dispatch, constants import os def GetSupplerData(file_name, sheet_name): app = win32com.client.Dispatch("Excel.Application") wkb = app.Workbooks.Open(file_name) sht = wkb.Worksheets(sheet_name) rng = sht.UsedRange data = [] for row in rng.Rows: if row.Height > 0.0: # Object2List(row.Value) data.append(list(list(row.Value)[0])) wkb.Close(False) app.Quit() if len(data) > 1: return [x for x in data[2:] if x[2] != None] else: return data
- 验证结果:
添加如下脚本到代码中,两个参数请根据实际情况进行修改。
if __name__ == '__main__':
result = GetCustomerData(
'D:RPA客户主数据填写模板6.11.xlsx',
'客户主数据-基本数据')
print(result)
正确执行后,可看到输出结果为EXCEL中非隐藏的数据。



