본문 바로가기

Window Programming/VB

엑셀파일을 그리드에 넣는 방법


1. 엑셀파일을 그리드에 넣는 방법은 여러가지가 있지만

   (1) 파일의 모든 시트까지 한꺼번에 TEXT 파일로 저장한 후

   (2) open 명령어로 TEXT파일을 한꺼번에 그리드로 불러오면 속도가 매우 빠르다.

 

2. TEXT 파일로 저장할때 엑셀2000과 엑셀2002/2003 버전때문에 많이 고민을 하였는데...

   아래의 소스를 참조하시기 바랍니다.

 

3. 필요사항

  (1) MSFlesGrid의 이름을 FG_execl로 변경

  (2) CommonDialog

 

 

Dim xlapp As New Excel.Application

Dim xlapp_worksheet As Worksheet

 

Dim sheet_count As Long

Dim sheet_col_count(100) As Long

Dim i,j,k As Long

Dim dummy As String

Dim row_data As Variant

Dim row_cnt As Long

Dim chk_str As String

Dim dummy_max As Long

Dim tot_col_count As Long

Dim tot_row_count As Long

 

 

FG_execl.Clear

FG_execl.Rows = 2

FG_execl.Cols = 2

 

tot_col_count = 0

tot_row_count = 0

 

SSTab1.Tab = 0

 

 

 

'엑셀 열기

CommonDialog1.Filter = "엑셀파일|*.xls"

CommonDialog1.Action = 1

 

 

If CommonDialog1.FileTitle = "" Then

    Exit Sub

End If

 

 

Label2.Caption = Trim(CommonDialog1.FileName)

 

 

xlapp.Workbooks.Open (Trim(CommonDialog1.FileName))

sheet_count = xlapp.Worksheets.Count

 

'전체 워크시트 불러오기와서 temp?.txt 파일로 저장

 

For i = 1 To sheet_count

 

    Set xlapp_worksheet = xlapp.Worksheets(i)

   

    xlapp_worksheet.Activate

    sheet_col_count(i) = xlapp_worksheet.UsedRange.Columns.Count

    xlapp.DisplayAlerts = False

   

    xlapp.ActiveWorkbook.SaveAs App.Path & "\temp\temp" & Trim(i) & ".txt", xlText, "", "", False, False '==>2000 + 2003 공용

    'xlapp_worksheet.SaveAs App.Path & "\temp\temp" & Trim(i) & ".txt", xlText, "", "", False, False ==>엑셀 2000용

    'ActiveWorkbook.SaveAs App.Path & "\temp\temp" & Trim(i) & ".txt", xlText, "", "", False, False  ===>엑셀 2003용

Next i

 

 

xlapp.Quit

Set xlapp_worksheet = Nothing

Set xlapp = Nothing

 

 

 

'전체 엑셀의 MAX cols값 추출

dummy_max = 0

For i = 1 To sheet_count

    If sheet_col_count(i) >= dummy_max Then

        dummy_max = sheet_col_count(i)

    End If

Next i

tot_col_count = dummy_max

 

 

'전체 row값 추출

For i = 1 To sheet_count

    Open (App.Path & "\temp\temp" & Trim(i) & ".txt") For Input As #1

        While Not EOF(1)

           Line Input #1, dummy

                row_data = Split(Trim(dummy), Chr(9))

                chk_str = "": For j = 0 To UBound(row_data): chk_str = chk_str & row_data(j): Next j

 

                If Len(Trim(dummy)) > 0 Then

                    tot_row_count = tot_row_count + 1

                End If

        Wend

    Close #1

Next i

 

 

 

'그리드 초기화

 

FG_execl.Cols = tot_col_count + 7

FG_execl.Rows = tot_row_count + 1

FG_execl.FixedCols = 3

 

'그리드에 출력

For i = 1 To sheet_count

    Open (App.Path & "\temp\temp" & Trim(i) & ".txt") For Input As #1

        While Not EOF(1)

            Line Input #1, dummy

                row_data = Split(Trim(dummy), Chr(9))

                chk_str = "": For j = 0 To UBound(row_data): chk_str = chk_str & row_data(j): Next j

               

                If Len(chk_str) > 0 Then

                    row_cnt = row_cnt + 1

                    FG_execl.ColWidth(1) = 1300: FG_execl.ColAlignment(1) = flexAlignLeftCenter

                    FG_execl.ColWidth(2) = 2000: FG_execl.ColAlignment(1) = flexAlignLeftCenter

                   

                    For j = 0 To UBound(row_data)

                        FG_execl.TextMatrix(row_cnt, j + 1) = row_data(j)

                    Next j

                   

                   

               

                End If

        Wend

    Close #1

Next i