2016-11-30 26 views
2

インターネットでこれを検索しましたが、本当に問題が見つかりませんでした。Excelからデータを取得して表示するアプリケーションをコーディングしています。 私のテストの全てが正しいだったが、突然、私はその後、文字はすべてExcelシートをインポートする際に問題が発生しました

PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";"; 

     OleDbConnection conn = new OleDbConnection(PathConn); 
     System.Data.DataTable dtSchema = new System.Data.DataTable(); 

     conn.Open(); 
     dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
     string Sheet1 = dtSchema.Rows[0].Field<string>("TABLE_NAME"); 

     conn.Close(); 
     OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + Sheet1 + "]", conn); 
     DataSet ds = new DataSet(); 
     myDataAdapter.Fill(ds); 

でこれらの文字を含むフィールドが表示されないことになる行の数の集合含む列をインポートする最初のデータセットがあることがわかりました正規結果

 
7841 
7847s 
2344 
2262 
7738 
JD32916 
JD329161 
JD318161 
JD31716 
JD7643 
JD21116 
7194 

第二のデータセットは

 
7841 
7847 
2344 
2262 
7738 






7194 

(I "が7847s" から 's' を除去通知)問題の結果でありますあなたが見ることができるように、文字が入ったフィールドはすべて消えてしまいました。 5文字以上の連続したフィールドがある場合にのみ発生します。例:(上から2番目の数字には、エラーが発生しないように 's'が含まれています)

+0

おそらく値は 'string'と見なされませんか?彼らは何とか数値型に変換されているようです。 – rbr94

+0

どのようにExcelをハードコーディングすることなくそれを防ぐには? –

+1

すべての列をテキスト列として扱うには、 '拡張プロパティ'セクションに 'IMEX = 1'を追加します。それがなければ、データ型はJetプロバイダによって推測されます(時には間違っている) –

答えて

0

すべての列をテキスト値として扱うには、拡張プロパティでIMEX=1を使用します。それがなければ、Jetプロバイダは、その列の値の大部分がどのような型であっても正しくない可能性のあるデータ型を推論します。

第2に、データにヘッダー行がないため、拡張プロパティでもHDR=NOを使用する必要があります。

関連する問題