После нескольких дней попыток решить эту проблему, я хотел бы попросить вас о помощи - в настоящее время мы разрабатываем рабочий процесс RPA, который берет файл PDF, читает его, форматирует его (это счет в формате PDF), а затем что-то делает сданные.Прямо сейчас у меня есть код, работающий в Visual Studio, который берет строку из операции чтения PDF и форматирует ее для обработки данных для дальнейшей обработки.В Visual Studio все в порядке, даже при строгом включении и все такое, но когда я вставляю код в действие Invoke Code, все, что я получаю, это
System.Reflection.TargetInvocationException: Исключение было выдано цельювызов.----> System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта.в UiPathCodeRunner_f63e6e400b2d4eb6b485d3e5c0e78e7f.Run (String temp_string, DataTable & dtable, String & ex, Int32 tab_len, String [] array_main)
Попробовал сузить проблему, уменьшив код, уменьшив кусочек кода до меньшего размера, уменьшив код до небольшого размерапроблема где-то в преобразовании данных.Кроме этого, я не вижу проблем с кодом, VS не видит проблем с кодом с теми же введенными данными, и предыдущая версия UiPath также не видела проблем с кодом (недавно обновленная студия 2018.2.2, я думаю, что до 2019.4.4 и имелпереписать весь код, потому что операции чтения pdf 2.0.0 и 3.0.0 читают pdf по-разному.
Я знаю, что большую часть кода можно упростить, но я переписал его так просто, как мне показалось возможным, поэтому UiPathмогу переварить его. Цените любую помощь, которую вы можете мне дать, а также простите мое форматирование, первый вопрос здесь.
Итак, код:
Dim e As String
Dim temp_string As String = "some long string that is delimited by \r\n"
Dim splitfinal As String
Dim delim1 As String() = New String() {"delimiter of invoice body start"}
Dim delim2 As String() = New String() {"delimiter of invoice body end"}
Dim delim3 As String() = New String() {"\r\n"}
Dim split1 As String()
Dim split2 As String()
split1 = temp_string.Split(delim1, StringSplitOptions.None)
split2 = split1(1).Split(delim2, StringSplitOptions.None)
splitfinal = split2(0).ToString()
Dim array_main As String() = splitfinal.Split(delim3, StringSplitOptions.None)
Dim array_len As Integer = array_main.Length
Dim temp As Double = Int((array_len) / 2) - 3
Dim tab_len As Integer = Convert.ToInt32(temp)
Dim table(tab_len, 9) As String
Dim i As Integer
Dim j As Integer = 1
Dim k As Boolean = True
Try
i = 0
'''''
For Each line As String In array_main
If (i>tab_len) Then
Exit For
ElseIf line.Trim = "" Then
Continue For
ElseIf line.Trim = line.Split(" "c)(0) Then
table(i, 0) &= " " & line.Trim
Continue For
End If
If k = True Then
j = 1
For Each word As String In line.Split(" "c)
If word.Trim.Contains("/") Or word.Trim.Contains("\") And j = 1 Then
table(i, j) = word.Trim
j = 3
ElseIf Int32.TryParse(word.Trim, Nothing) = False And table(i, 0) = Nothing Then
table(i, 0) = word.Trim
ElseIf Int32.TryParse(word.Trim, Nothing) = False And table(i, 0) <> Nothing And j = 1 Then
table(i, 0) &= " " & word.Trim
ElseIf (word.Trim = "6117") Or (word.Trim = "6118") Then
table(i, 2) = word.Trim
k = False
ElseIf Int32.TryParse(word.Trim, Nothing) And j = 1 Then
table(i, j) = word.Trim
j = 3
ElseIf j <> 1 Then
table(i, j) = word.Trim
j += 1
Else
'Throw New Exception
End If
Next
ElseIf k = False Then
For Each word As String In line.Split(" "c)
If (j = 8) And (k = False) Then
table(i, 2) &= word.Trim
k = True
ElseIf j = 9 Then
table(i, j) = word.Trim
If (i>tab_len) Then
Continue For
Else
i += 1
End If
j = 1
Else
table(i, j) = word.Trim
j += 1
End If
Next
End If
Next
Catch ex As Exception
e = ex.ToString
End Try
''done Now to convert to datatable
Dim dtable = New DataTable
For i = 0 To tab_len
Dim row As DataRow = dtable.NewRow
For j = 0 To 9
If (i = 0) Then
dtable.Columns.Add(j.ToString, GetType(String))
End If
If (table(i, j) = Nothing) Then
row(j) = ""
Else
row(j) = table(i, j)
End If
Next
dtable.Rows.Add(row)
Next