[vb.net] VB.NET에서 Excel 파일 데이터 추출(읽기) 방법 > vb.net

본문 바로가기

vb.net

[File] [vb.net] VB.NET에서 Excel 파일 데이터 추출(읽기) 방법

회원사진
하나를하더라도최선을
2024-07-16 10:51 216 0

본문



엑셀(Excel) 데이터 추출

VB.NET을 사용하여 엑셀 파일을 읽는 방법을 소개합니다. OfficeOpenXml 라이브러리를 활용하여 엑셀 파일을 열고, 첫 번째 워크시트에서 데이터를 추출하여 DataTable에 저장합니다. 각 행과 열을 반복하면서 셀 값들을 데이터 테이블에 추가하고, 최종적으로 완성된 데이터 테이블을 반환합니다. 이 함수는 엑셀 파일의 데이터 구조가 올바르지 않을 경우에는 적절한 로그 메시지를 출력하고 null을 반환하여 오류 처리를 합니다.

이 함수는 비상업적 용도로 라이센스를 설정할 수 있는 옵션을 제공하며, 엑셀 파일의 내용을 문자열로 처리하여 DataTable에 저장하는 예시를 제공합니다.

이 VB.NET 함수를 사용하면 엑셀 파일에서 데이터를 효과적으로 추출하고 관리할 수 있습니다.

NuGet 추가하기

NuGet에서 "EPPlus"를 검색해서 아래 사진처럼 설치 합니다.

a762cde530949007c7f42b1c6198d365_1721094668_853.png

Excel 파일 데이터 추출(읽기) 함수 (ReadExcelFile)

이 ExcelReader 클래스의 ReadExcelFile 함수는 지정된 엑셀 파일을 읽어 DataTable 형식으로 반환하는 기능을 제공합니다.

Imports System.IO
Imports OfficeOpenXml

Public Class ExcelReader
    Private Shared isOpen As Boolean

    Public Shared Function ReadExcelFile(filePath As String) As DataTable
        If Not isOpen Then OfficeOpenXml.ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial ' 또는 LicenseContext.Commercial
        Dim dt As New DataTable()

        ' Load the Excel file
        Dim fileInfo As New FileInfo(filePath)
        Using package As New ExcelPackage(fileInfo)
            ' Get the first worksheet in the workbook
            Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets(0)
            If worksheet.Dimension Is Nothing Then
                program1472.LOG("데이터 구조가 올바르지 않습니다.",, 1)
                Return Nothing
            End If
            ' Loop through all rows from the first row (start from 1 to skip header row)
            For row As Integer = worksheet.Dimension.Start.Row To worksheet.Dimension.End.Row
                ' Create a new DataRow
                Dim newRow As DataRow = dt.NewRow()

                ' Loop through all columns in the current row
                For col As Integer = worksheet.Dimension.Start.Column To worksheet.Dimension.End.Column
                    ' Add the cell value to the DataRow
                    If Not dt.Columns.Contains((col - 1).ToString) Then dt.Columns.Add((col - 1).ToString, GetType(String))
                    newRow(col - 1) = If(worksheet.Cells(row, col).Value IsNot Nothing, worksheet.Cells(row, col).Value.ToString(), Nothing)
                Next

                ' Add the DataRow to the DataTable
                dt.Rows.Add(newRow)
            Next
        End Using

        Return dt
    End Function
End Class

장점

간편한 데이터 추출

OfficeOpenXml 라이브러리를 이용하여 엑셀 파일을 손쉽게 열고 데이터를 추출할 수 있습니다. 필요한 데이터를 한 번에 DataTable 형식으로 변환하여 처리할 수 있어 개발 시간을 단축시킵니다.

유연성과 확장성

엑셀 파일의 첫 번째 워크시트에서 데이터를 읽지만, 필요에 따라 다른 워크시트나 특정 범위의 데이터를 읽도록 함수를 수정할 수 있습니다. 이는 다양한 엑셀 데이터 처리 요구사항에 대응할 수 있는 유연성을 제공합니다.

오류 처리 기능

함수는 데이터 구조가 올바르지 않은 경우에 대비하여 적절한 오류 메시지를 출력하고 처리를 중단합니다. 이로 인해 예기치 않은 데이터 처리 오류를 방지할 수 있습니다.

비상업적 용도 지원

OfficeOpenXml 라이브러리는 비상업적 용도로 라이센스를 설정할 수 있는 옵션을 제공하므로, 개인 프로젝트나 교육적 목적에서 자유롭게 활용할 수 있습니다.

이 VB.NET 함수를 사용하면 엑셀 파일에서 데이터를 효과적으로 추출하고 관리할 수 있습니다.


a762cde530949007c7f42b1c6198d365_1721094681_079.png

이와 같은 엑셀 파일을 데이터 테이블로 변환하여 DataGridView로 보여줍니다.


a762cde530949007c7f42b1c6198d365_1721094691_4355.png

Example:

    Private Sub BhsButton3_Click(sender As Object, e As EventArgs) Handles BhsButton3.Click
        Dim filePath As String = program1472.Functions.File.OpenFilePicker(program1472.Functions.File.getfilter("excel"))
        template = ExcelReader.ReadExcelFile(filePath)
        BhsDataGridView1.DataSource = template
    End Sub
Imports System.IO
Imports System.Windows.Forms

Namespace Functions
    Public Class [File]
        Public Shared Function getfilter(datatype As String) As String
            Select Case datatype.ToLower
                Case "img", "image", "이미지", "사진" : Return "이미지 파일 선택 (*.jpg;*.jpeg;*.png)|*.jpg;*.jpeg;*.png"
                Case "pdf" : Return "PDF 파일 선택 (*.pdf)|*.pdf"
                Case "excel" : Return "Excel 파일 선택 (Excel Files)|*.xls;*.xlsx;*.xlsm"
                Case Else : Return String.Format("{0} 파일 (*.{0})|*.{0}", datatype)
            End Select
        End Function

        Public Shared Function OpenFilePicker(filter As String, Optional title As String = "Please select a file") As String
            Using openFileDialog As New OpenFileDialog()
                openFileDialog.Title = title
                openFileDialog.Filter = filter
                openFileDialog.RestoreDirectory = True

                If openFileDialog.ShowDialog() = DialogResult.OK Then
                    Return openFileDialog.FileName
                Else
                    Return String.Empty
                End If
            End Using
        End Function    
	End Class
End Namespace

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색