OleDb 방식으로 excel 읽기, 현실과 맞지 않음

3257 단어 Excel
처음에는 엄격한 excel 템플릿에 따라 실행되었고 데이터는 모두 엄격하게 요구되었지만 고객에게 도착하면 무슨 수작이 오는지...지정한 템플릿도 사용하지 않겠습니다..
문제 발생: 데이터 열 형식이 일치하지 않습니다. 예를 들어 한 열 앞의 몇 개는 모두 숫자 형식이고, 중간에 몇 개의 문자 형식으로 저장된 숫자를 삽입합니다.이러한 데이터를 DbNull로 직접 읽기
어떻게 해결할지..검색해봐...이게 oledb 버그인 걸 알고...IMEX =1 로 설정하든 =2 로 설정하든 간에 그는 이 데이터를 읽지 못할 것이다
최종 솔루션...인터넷을 사용하면 먼저 csv로 변환...그리고 텍스트 줄을 읽고 일부 코드는 네트워크에서 복사합니다
 


            string TempPath = AppDomain.CurrentDomain.BaseDirectory + "csvTemp\\";

            if (Directory.Exists(TempPath))

            {

                Directory.Delete(TempPath, true);

            }

            Directory.CreateDirectory(TempPath);

            string filename = TempPath + Guid.NewGuid() + ".csv";

            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();

            try

            {

                app.Visible = false;

                Workbook wBook = app.Workbooks.Add(true);

               

                app.ScreenUpdating = false;

                Workbook wb = app.Workbooks.Open(filepath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);



                wb.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, Type.Missing, Type.Missing,

                            Type.Missing,

                            Type.Missing,

                            Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,

                            Type.Missing, Type.Missing, Type.Missing,

                            Type.Missing);

                            wb.Close(false, Type.Missing, false);



                         

                

       

            app.Workbooks.Close();

            app.Quit();

            app = null;

            GC.Collect();



            String line;

            String[] split = null;

            DataTable table = new DataTable(TableName);

 



            DataRow row = null;

            StreamReader sr = new StreamReader(filename, System.Text.Encoding.Default);

            //  

            line = sr.ReadLine();

            split = line.Split(',');

            foreach (String colname in split)

            {

                table.Columns.Add(colname, System.Type.GetType("System.String"));

            }

            //  

            int j = 0;

            while ((line = sr.ReadLine()) != null)

            {

                j = 0;

                row = table.NewRow();

                split = line.Split(',');

                foreach (String colname in split)

                {

                    row[j] = colname;

                    j++;

                }

                table.Rows.Add(row);

            }

            sr.Close();

            //  

            dgclass.DataSource = table;



            importNow.Enabled = true;



            }

            catch (Exception ex)

            {

                log.Error(ex, ex);

                MessageBox.Show(this, ex.Message + "\r
excel "); }

좋은 웹페이지 즐겨찾기