はい。私はほとんど誰も気に入らないライブラリ(COM/Interop)を使用しています。私は、Excelワークブックを解析し、その列を識別し、ユーザーがそれぞれの種類をダイヤルするプログラムを実行することを練習しています。すべてが完璧に機能し、各列の型のエラーを検出することができます(たとえば、数値列に文字列がある場合など)。問題が発生している唯一の型は日付です。私は昨日ここで質問をしました。何か考えていたからですが、その質問から日付は単なる数字であることが分かっています。これは問題ありません。Date.fromOADateを使うことができます。¿セルの正確なアドレスを取得する方法は? (VB.NET/INTEROP.EXCEL)
私が直面している状況は、Excelの列に日付の情報が含まれていて、たとえば、そのデータ列がマークされていないExcelブックをプログラムに読み込むときに、エラーとして。それを空のセル(私を驚かせた事)として扱います。私は、日付データ型を比較するために起動したときに
この
は私が最初の2つのタイプが良い実行されて言ったように私は、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" は(ETC A4、B3、C50 ...)
を私は列の数、ページ、および使用される範囲を検出するために、相互運用機能を使用します。私がここに示す関数は、単にセルのデータを比較するためのものです...変数 "itm"がNullのとき、ループの現在のセルをチェックしたいと思います。 – TwoDent