Да. Я использую библиотеку, которой почти никто не нравится (COM/Interop). Я занимаюсь выполнением программы, которая анализирует книгу Excel, идентифицирует ее столбцы, а пользователь набирает тип каждого из них. Все отлично работает, я могу обнаружить ошибки в типе каждого столбца (например, если есть строка в числовом столбце), но единственный тип, с которым у меня возникают проблемы, - это даты. Я вчера задал вопрос о датах (потому что я что-то думал), но из этого вопроса я знаю, что даты - это просто цифры ... Это не проблема, потому что я могу использовать Date.fromOADate.¿Как получить точный адрес ячейки? (VB.NET/INTEROP.EXCEL)
Ну, ситуация, с которой я сталкиваюсь, заключается в том, что если столбец Excel содержит информацию о датах и, например, вы добавляете строку данных в этот столбец дат при загрузке книги Excel в программу, эта строка данных не помечена это как ошибка ... но рассматривает его как пустую ячейку (вещь, которая меня удивила).
это функция, которую я написал, чтобы отметить ошибки каждого столбца
Protected Friend Function obtenerErroresColumna(ByVal column As String, ByVal page As String, ByVal tipe As String) As Integer
If (Not String.IsNullOrEmpty(column)) Then
Dim cmd As String = "Select [" & column & "] from [" & page & "$]"
Dim errors As Integer = 0
Dim table As New DataTable
Try
Dim adapter As New OleDbDataAdapter(cmd, conexion)
adapter.Fill(table)
adapter.Dispose()
For Each itm In table.Rows
If (tipe.Equals("String")) Then
If (Not IsDBNull(itm(0))) Then
If (IsNumeric(itm(0))) Then
errors += 1
setValueError = itm(0)
End If
End If
ElseIf (tipe.Equals("Numeric")) Then
If (Not IsDBNull(itm(0))) Then
If (Not IsNumeric(itm(0))) Then
errors += 1
setValueError = itm(0)
End If
End If
ElseIf (tipe.Equals("Date")) Then
If (Not IsDBNull(itm(0))) Then
If (Not IsDate(itm(0))) Then
errors += 1
setValueError = itm(0)
End If
End If
End If
Next
table.Dispose()
Return errors
Catch ex As Exception
boxMessage("Error", ex.Message, My.Resources._error).ShowDialog()
Return errors
End Try
Else
Return 0
End If
End Function
Ok, как я сказал, что первые два типа работает хорошо, проблема, когда я начинаю сравнивать тип данных даты. У меня есть эта идея, если столбец является типом даты: если программа возвращает пустую ячейку (как я уже говорил ранее, строковые данные возвращают меня как пустые ячейки), то программа получает адрес ячейки для замены. Я уже написал метод подстановки ... только по мере того, как параметры должны были бы пройти, это сегодняшняя дата, точный адрес ячейки и имя столбца.
Я хотел бы проверить адрес текущей ячейки цикла, когда переменная "ITM" является Null (A4, B3, С50 .... Etc)
я использую Interop, чтобы определить количество столбцов, страниц, и используемый диапазон. Функция, которую я показываю здесь, предназначена только для сравнения данных в ячейках ... Я хотел бы проверить текущую ячейку цикла, когда переменная «itm» имеет значение Null. – TwoDent