VB.NETでExcelデータインポート時にスクロール表示を実装する方法

Excelデータインポート中にデータをスクロール表示したい場合、Excelデータを逐行読み取り、スクロールウィンドウに表示することができます。

VB.NETでは、Excel.Rangeオブジェクトを使用してExcelデータを逐行読み取り、各行のデータをスクロールウィンドウ(ListBoxTextBoxなど)に追加して表示できます。以下に、Excelデータを逐行スクロール表示する実装例を示します:

' listBoxImportDataという名前のListBoxコントロールがあると仮定します

' Excelファイルを開き、ワークブックとワークシートを取得
Dim excelApplication As New Excel.Application()
Dim excelWorkbook As Excel.Workbook = excelApplication.Workbooks.Open(fileLocation)
Dim excelSheet As Excel.Worksheet = excelWorkbook.Worksheets(1)

' 使用範囲を取得
Dim dataRange As Excel.Range = excelSheet.UsedRange

' Excelデータを逐行読み取り、スクロール表示
Dim totalRows As Integer = dataRange.Rows.Count
Dim totalColumns As Integer = dataRange.Columns.Count

For currentRow As Integer = 1 To totalRows
    Dim rowData As String = ""

    For currentColumn As Integer = 1 To totalColumns
        Dim cellContent As Object = dataRange.Cells(currentRow, currentColumn).Value
        
        If cellContent IsNot Nothing Then
            rowData += cellContent.ToString() & vbTab
        Else
            rowData += "[空]" & vbTab
        End If
    Next

    ' 各行のデータをスクロールウィンドウに追加して表示
    listBoxImportData.Items.Add(rowData)

    ' 最後の行までスクロール
    listBoxImportData.TopIndex = listBoxImportData.Items.Count - 1

    ' スクロール効果を実現するために、遅延を追加
    System.Threading.Thread.Sleep(300) ' 300ミリ秒間一時停止
Next

' Excelアプリケーションを閉じる
excelWorkbook.Close()
excelApplication.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApplication)

上記のコードでは、フォームにlistBoxImportDataという名前のListBoxコントロールが配置されていることを前提としています。Excelデータを逐行読み取り、Items.Addメソッドを使用して各行のデータをlistBoxImportDataコントロールに追加することで、インポートデータのスクロール表示を実現しています。

スクロール効果を実現するために、各行のデータを追加するたびに、listBoxImportDataコントロールのTopIndexを最後の行のインデックスに設定し、最新追加データまでスクロールするようにしています。また、スクロール速度を調整するために、各行のデータ追加後にThread.Sleepメソッドを使用して遅延時間を追加しています。

アプリケーションにコードを組み込み、スクロールウィンドウコントロールと遅延時間を必要に応じて調整してください。

Dim cellValue As String = xlRange1.Cells(row, col).Value.ToString()「時間」フィールドでエラーが発生。「オブジェクトのインスタンスに参照が設定されていません。」

このエラーは、セルの値が空であるか、セルオブジェクトがnullであることが原因です。セルの値にアクセスする前に、セルが空であるかnullであるかを確認してください。

以下に修正後のコード例を示します:

Dim cellContent As Object = xlRange1.Cells(row, col).Value

If cellContent IsNot Nothing Then
    Dim cellText As String = cellContent.ToString()
    ' 空でないセルの値を処理
    ' ...
Else
    ' 空のセルを処理
    ' ...
End If

上記のコードでは、まずセルの値をcellContentオブジェクトに格納します。次に、cellContentがnullであるかどうかを確認します。セルが空でない場合は、その値を文字列に変換して処理します。セルが空の場合は、Elseブランチで空のセルを処理できます。

セルの値にアクセスする前に、適切な確認を行い、null参照エラーを避けてください。

タグ: VB.NET Excel COM データインポート UIコントロール

7月28日 16:01 投稿