[기타] [vb.net] VB.NET에서 Excel 파일 데이터 추출(읽기) 방법
![회원사진](http://program1472.com/data/member/profile/program1472.jpg)
본문
엑셀(Excel) 데이터 추출
VB.NET을 사용하여 엑셀 파일을 읽는 방법을 소개합니다. OfficeOpenXml 라이브러리를 활용하여 엑셀 파일을 열고, 첫 번째 워크시트에서 데이터를 추출하여 DataTable에 저장합니다. 각 행과 열을 반복하면서 셀 값들을 데이터 테이블에 추가하고, 최종적으로 완성된 데이터 테이블을 반환합니다. 이 함수는 엑셀 파일의 데이터 구조가 올바르지 않을 경우에는 적절한 로그 메시지를 출력하고 null을 반환하여 오류 처리를 합니다.
이 함수는 비상업적 용도로 라이센스를 설정할 수 있는 옵션을 제공하며, 엑셀 파일의 내용을 문자열로 처리하여 DataTable에 저장하는 예시를 제공합니다.
이 VB.NET 함수를 사용하면 엑셀 파일에서 데이터를 효과적으로 추출하고 관리할 수 있습니다.
NuGet 추가하기
NuGet에서 "EPPlus"를 검색해서 아래 사진처럼 설치 합니다.
![87828ecf4041ed3b70bf643ba6e22aeb_1721172571_2319.png 87828ecf4041ed3b70bf643ba6e22aeb_1721172571_2319.png](../../../data/editor/2407/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 87828ecf4041ed3b70bf643ba6e22aeb_1721172590_6795.png](../../../data/editor/2407/87828ecf4041ed3b70bf643ba6e22aeb_1721172590_6795.png)
이와 같은 엑셀 파일을 데이터 테이블로 변환하여 DataGridView로 보여줍니다.
![87828ecf4041ed3b70bf643ba6e22aeb_1721172602_5515.png 87828ecf4041ed3b70bf643ba6e22aeb_1721172602_5515.png](../../../data/editor/2407/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
댓글목록0