UiPath Studioを使用して、VBAを呼び出し、戻り値として文字列型二次元配列をObject型変数に受け取っています。
UiPath上でこの二次元配列に対してループ処理をしたいのですが、前処理の型変換がうまくできず、躓いています。
変換先の型と、変換の仕方をどなたかご教授願えますでしょうか?
併せて配列の次元が1次元の場合についても教えていただけますと幸いです。
こんにちは
UiPathのワークフロー内で二次元配列を定義するのが困難なため(ジャグ配列になるので)
例えば以下のコードで、一旦Objcetとして受けた二次元配列をジャグ配列に変換してあげると良いかと思います。
Dim ar As String(,)
ar = CType(o,String(,))
Dim row As Int32 = ar.GetLength(0)
Dim col As Int32 = ar.GetLength(1)
arrArrStr = Enumerable.Range(0,row).Select(Function(r) Enumerable.Range(0,Col).Select(Function(c) ar(r,c) ).ToArray()).ToArray()
For two-dimensional array:
myArray2D = DirectCast(myObject, String(,))
For i = 0 To myArray2D.GetLength(0) - 1
For j = 0 To myArray2D.GetLength(1) - 1
Log Message: myArray2D(i, j)
Next
Next
For one-dimensional array:
myArray1D = DirectCast(myObject, String())
For Each item In myArray1D
Log Message: item
Next
Ensure VBA returns the correct array type.
ご丁寧にありがとうございます
VB.NETに疎く、かつInvokeCodeアクティビティを使用したことが無いので、理解できておらず申し訳ないですが、Exception has been thrown by the target of an invocation.のエラーが発生しました・・・
入力しているObject型変数は下記の通りなのですが、何が問題として考えられますでしょうか?
何か必要な情報があれば教えていただけますと幸いです。
Thank you for your answer.
I tried your code but I got an error message「End of statement is needed」at the red underline in this picture.
What is wrong?
Sorry for my poor English and knowledge.
VBA側の配列が1始まりになっているからかと思います。
取り急ぎですが、以下のコードを試せますでしょうか?
Dim offset =1
Dim ar As String(,)
ar = CType(o,String(,))
Dim row As Int32 = ar.GetLength(0)
Dim col As Int32 = ar.GetLength(1)
arrArrStr = Enumerable.Range(0,row).Select(Function(r) Enumerable.Range(0,Col).Select(Function(c) ar(offset+r,offset +c) ).ToArray()).ToArray()
ありがとうございます。
無事解決しました!
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.