インターネットでこれを検索しましたが、本当に問題が見つかりませんでした。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'が含まれています)
おそらく値は 'string'と見なされませんか?彼らは何とか数値型に変換されているようです。 – rbr94
どのようにExcelをハードコーディングすることなくそれを防ぐには? –
すべての列をテキスト列として扱うには、 '拡張プロパティ'セクションに 'IMEX = 1'を追加します。それがなければ、データ型はJetプロバイダによって推測されます(時には間違っている) –