C# - Excel 내용 읽어오기

Excel 내용을 읽는 것을 하고 있는데

Excel. range범위를


range = ESheet.get_Range("A1", missing); //A1 셀 선택 

range = range.get_Resize(5,5) // A1부터 5,5의 크기 


이런 식으로 설정 해줘야 해서.

이런 식으로는 텍스트를 읽어 올 수 있는데 

내가 모든 EXCEL 파일의 셀의 크기를 알 수 없어서 

읽어 오는 파일 마다 셀의 크기가 다른데 그럴 땐 어떻게 해야 하나 

하루 종일 찾았다 ㅜㅜ


(엑셀에서 셀이 만들어 질 수 있는 크기까지 찾아서 모든 크기안에 있는 내용을 찾으려고 했는데

데이터가 너무 커서 오버플로우 남 ㅋ  1048576 x 16384)


셀에 대한 메서드가 따로 있어서 

range를 설정 해 줄때 사용된 범위에 있는 마지막 셀을 이용하여 

아무 엑셀 파일을 선택하면 텍스트를 읽어 올 수 있게 설정해 주었다.


      public string ReadExcel(string path)

        {

           string filename = path;// string filename = "C:\\test.xlsx";

            object missing = System.Reflection.Missing.Value;


            Excel.Application EApp = new Excel.Application();


            Excel.Workbook EBook;

            Excel.Workbooks EBooks;


            Excel.Sheets ESheets;

            Excel._Worksheet ESheet;


            Excel.Range range;


            EApp.Visible = false;

//          EApp.WindowState = Excel.XlWindowState.xlMinimized;


            EBooks = EApp.Workbooks;

            EBook = EApp.Workbooks.Open(filename, missing, missing, missing, missing, missing, missing

               , missing, missing, missing, missing, missing, missing, missing, missing);

            

            ESheets = EBook.Worksheets;

            ESheet = (Excel._Worksheet)EBook.ActiveSheet;

            ESheet = (Excel._Worksheet)ESheets.get_Item(1);


            range = ESheet.get_Range("A1").SpecialCells(Excel.XlCellType.xlCellTypeLastCell);


           long row = range.Row;

            long column = range.Column;

            

String valueString = "";


            for (long rowCounter = 1; rowCounter <= row; rowCounter++)

            {

                for (long colCounter = 1; colCounter <= column; colCounter++)

                {

                    Excel.Range cell = (Excel.Range)ESheet.Cells[rowCounter, colCounter];


                    if (cell.Value == null)

                        valueString = string.Concat(valueString, " ");

                    else

                    {

                        valueString = string.Concat(valueString, cell.Value.ToString() + ",");

                        Console.Write(valueString);

                    }

                        textBox1.Text = valueString;


                }

                valueString = String.Concat(valueString,"\r\n");


            }




================================================================================
저 위의 함수를 이용해서 그동안 엑셀을 읽어 왔는데, 
데이터가 너무 클 경우에는 읽는 속도가 10분이 넘어감...ㅋㅋ( 2중 for문 때문인가ㅜㅜ )

그래서 새로운 방법을 알아 냄 
DataTable을 이용하여서 DataTable에 값을 저장 -> 이 부분이 진짜 빠름

나는 필요한게 String 형이여서 row[Col].ToString()으로 변환 해준다 

그래도 이전보다는 빨라졌당 1분 30초 정도 


using System.Data.OleDb;


      public string ReadExcel(string strFilePath)
        {
            // 엑셀 문서 내용 추출
            object missing = System.Reflection.Missing.Value;
            String valueString = "";

            string strProvider = string.Empty;
            strProvider = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + strFilePath + @";Extended Properties=Excel 12.0";

            OleDbConnection excelConnection = new OleDbConnection(strProvider);
            excelConnection.Open();

            string strQuery = "SELECT * FROM [Sheet1$]";

            OleDbCommand dbCommand = new OleDbCommand(strQuery, excelConnection);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);

            DataTable dTable = new DataTable();
            dataAdapter.Fill(dTable);

            // dTable에 추출된 내용을 String으로 변환
            foreach (DataRow row in dTable.Rows)
            {
                foreach (DataColumn Col in dTable.Columns)
                {
                    valueString += row[Col].ToString() + " ";
                }
            }
        
            dTable.Dispose();
            dataAdapter.Dispose();
            dbCommand.Dispose();

            excelConnection.Close();
            excelConnection.Dispose();

            return valueString;
        }







- 참고 

NamedRange.SpecialCells 메서드

셀에 대한 내용
http://technet.microsoft.com/ko-kr/subscriptions/microsoft.office.tools.excel.namedrange.specialcells