자료실

부자는 돈을 써서 시간을 아끼지만 가난한 사람은 시간을 써서 돈을 아낀다

vb.net

IT HUB를 찾아주셔서 감사합니다.

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

페이지 정보

profile_image
작성자 하나를하더라도최선을
댓글 0건 조회 791회 작성일 24-07-17 08:30

본문

엑셀(Excel) 데이터 추출

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

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

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

NuGet 추가하기

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

87828ecf4041ed3b70bf643ba6e22aeb_1721172571_2319.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 함수를 사용하면 엑셀 파일에서 데이터를 효과적으로 추출하고 관리할 수 있습니다.

87828ecf4041ed3b70bf643ba6e22aeb_1721172590_6795.png

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

87828ecf4041ed3b70bf643ba6e22aeb_1721172602_5515.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

댓글목록

등록된 댓글이 없습니다.