2016-08-23 13 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

thaの場合は、今私はわからないんだけどtは正しいセル型の値を正確なSQL型にキャストする "正しい"型を取得するか、わからないより良い解決策があるかどうかだけです。

各セルの種類を取得するためのより良い方法はありますか私は、各可能なセルの書式をこのような列挙型か何かを作成し、マッピングする必要がありますか?

+0

実際には、数値書式はセルの種類ではありません。何をしたいですか? Excelシートのデータベースに書き込むだけですか? –

+0

さて、これらの値をSqlTypesに_cast_することはできませんが、SqlTypeを_infer_することができます。 – stuartd

+0

@MarcelTheis:多分セルA2は、私はすでに同じ形式であるSQLテーブルにcolumに存在し、ときに右 –

答えて

1

セルの種類を取得できません。 Excelシートのデータをdbに入力したい場合は、必要なSQL型とfromatにキャストしてください。特にdatetimeの場合、datetime形式はdb設定に依存するため、これは必須です。
空のセルには注意してください。キャストする前にチェックしなければなりません。 Office 2010および2013では、空のセルはNULLです。 ToString()などを使用する前にこれをチェックする必要があります。これは、例外をスローするためです。また、二重で慎重にしてください。 「、」または「」を使用してください。これはEcxelの設定によって異なります。