2016-08-23 4 views
2

Excel 시트에서 SQL 스크립트를 생성하므로 모든 셀의 형식을 알아야합니다. Excel 셀 전송

따라서 난 후에 텍스트 상자의 결과와 다음 코드의 세포 형태를 얻으려고 노력

C# 코드 각 셀 excel sheet 결과

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using Excel = Microsoft.Office.Interop.Excel; 
using System.Windows.Forms; 

namespace Export 
{ 
    internal class ExcelWorker 
    { 
     Excel.Application _xlApp = new Excel.Application(); 
     Excel.Workbook _xlWorkBook; 
     Excel.Range _range; 
     object misValue = System.Reflection.Missing.Value; 
     private void Show(string value) => MessageBox.Show(value); 
     internal void ReadExcelFile(string path, string cell) 
     { 
      try 
      { 
       _xlWorkBook = OpenBook(_xlApp, path, false, true, false); 
       Excel.Worksheet sheet = _xlWorkBook.Sheets["Sheet1"] as Excel.Worksheet; 
       Show(string.Format("Cell {0} \n\n Cell Number Format {1}", cell, sheet.get_Range(cell).NumberFormat)); 
      } 
      catch (Exception ex) 
      { 
       throw new Exception(ex.Message); 
      } 
     } 
     private static Excel.Workbook OpenBook(Excel.Application excelInstance, string fileName, bool readOnly, bool editable, 
     bool updateLinks) 


{ 
       Excel.Workbook book = excelInstance.Workbooks.Open(
        fileName, updateLinks, readOnly, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, editable, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing); 
       return book; 
      } 
    } 
} 

가 시트 엑셀 :

enter image description here

지금 내가 그쪽으로 잘 모르겠어요 t는 올바른 SQL 형식으로 Excel 셀 값을 캐스팅하는 "올바른"형식을 얻는 것이거나 내가 모르는 더 나은 솔루션이있는 경우에만 발생합니다.

각 셀의 형식을 얻는 더 좋은 방법이 있습니까? 아니면이 같은 열거 형 또는 뭔가를 만들고 각 가능한 셀 형식을 매핑해야합니까?

+0

실제로 숫자 서식은 셀 유형이 아닙니다. 뭐하고 싶어? Excel 시트에서 오는 데이터베이스에만 데이터를 씁니 까? –

+0

글쎄,이 값들을 SqlTypes에 _cast_ 할 수는 없겠지만, 그것들로부터 SqlType을 _infer_ 할 수는 있습니다. – stuartd

+0

@MarcelTheis : 아마도 A2 셀이 날짜 또는 datetime 인 경우 SQL 테이블의 이미 존재하는 열이 같은 형식인지 확인하고 해당 스크립트가 삽입 될 때 해당 스크립트를 삽입해야합니다. –

답변

1

셀 유형을 가져올 수 없습니다. 엑셀 시트의 데이터를 db에 입력하려면 필요한 SQL 형식과 원본 형식으로 캐스팅 해보십시오. 특히 Datetime 형식의 경우 db 설정에 따라 달라 지므로 필수 사항입니다.
빈 셀에는주의하십시오. 전송하기 전에 확인해야합니다. Office 2010 및 2013에서는 빈 셀이 NULL입니다. ToString() 또는 이와 유사한 것을 사용하기 전에이를 확인해야합니다. 예외가 발생하기 때문입니다. 또한 두 배로 신중해야합니다. ","또는 "을 사용하십시오." 이것은 Ecxel의 설정에 달려 있습니다.