所有的Excel操作,都可以用VBA来执行,用uipath里面的excel activity比较麻烦。
不想把excel弄成xlsm的话,就用invoke VBA,把VBA写在txt里。
第一行是txt的路径
第二行是sub/function的名字
如果要用到 OutputValue,通过vba返回值到uipath的话,要用Function。
Function过程:总是以“Function 程序名()”开头,以“End Function”结尾,和Sub过程的区别是Function过程有返回的值,值可以是一个值或一个数组,就像我们的工作表函数,Function过程也就是我们说的自定义函数。
函数示例:
Function mysum(n1 as Integer, n2 as Integer) As Integer
Dim s As Integer
s = n1 + n2
mysum = s
End Function
上例中定义了一个名为mysum的函数,它接受两个类型为Integer的参数,并且返回值是Integer类型。在函数内部计算了这两个参数相加的和,并把这个和作为返回值赋给mysum。可以通过调用这个函数,并传递相应的参数,获得它的返回值。
Uipath-Vlookup
vlookup要放在for each excel row里面,让每一个单元格遍历。与EXCEL中的vlookup函数对应如上图。save to就是vlookup的返回值要放的位置。如果要放在vlookup值的旁边就写CurrentRow.ByIndex(1),我这里直接放在变量v里面。
Add To Collection
要把每一个v出来的结果都放在一个list里面,可以用Add To Collection。
放的是string,所以type也要选string。
现在只是把字符串都存放在list里。我们现在需要把多个字符串变成一个字符串,用“;”连接并去重
String.Join(";", l.Distinct)
如果想让字符串用换行符连接
string.Join(Environment.NewLine, l.Distinct.ToArray())
VBA部分
将excel中指定range的部分转化成图片
Sub picSaveAs()
Dim myPic As Shape, pic As Shape
Dim rng As Range, n%
Dim num
'如果本来表格里是没有图的,那copypicture出来的永远都是第一张Shapes(1),所以直接固定参数1,不然有的时候会报错
n = ActiveSheet.Shapes.Count
num = ActiveSheet.Range("d1").End(xlDown).Row
ActiveSheet.DrawingObjects.Delete
Set rng = ActiveSheet.Range("D1:S" & num)
rng.CopyPicture xlScreen, xlBitmap
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
'Set myPic = ActiveSheet.Shapes(n + 1)
Set myPic = ActiveSheet.Shapes(1)
myPic.Copy
With ActiveSheet.ChartObjects.Add(0, 0, myPic.Width, myPic.Height).Chart
.Parent.Select
.Paste
.Export "想要的路径"
.Parent.Delete
End With
myPic.Delete
'delete all shapes
ActiveSheet.DrawingObjects.Delete
Set myPic = Nothing
Set rng = Nothing
End Sub
HTML
使用SMTP发邮件,body用html写。
邮件中的字体设置如下 {font-family: 等线;font-size:14px}
邮件中的img要附在attach里面,然后img调用
<html>
<style type="text/css">
body {font-family: 等线;font-size:14px}
</style>
<body>
<p>Dear All,</p>
<p>以下LOP即将过期或已过期,请及时处理。</p>
<p>公盘地址:</p>
<a href='xxxx'>xxxx</a>
<img src=cid:xxx.png width=100% height=100%>
</body></html>