
在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中非隐藏的数据。