数日前に質問をしましたが、十分な回答が見つかりませんでした。問題をもう少し分析して、新しいスレッドを作成することにしました。すべきでなかった場合は、お知らせいただくか、質問を閉じてください。
2006 年 6 月 22 日、2006 年 6 月 22 日のような値を持つ日付形式の列を持つOPEN Excel ファイルがあります。OleDbDataReader を使用して Excel を読み込もうとしています。コードは次のようになります。
string sql = string.Format("SELECT * FROM [{0}]", excelSheetName);
internal OleDbCommand command = new OleDbCommand();
command.CommandText = sql;
OleDbDataReader oleRdr = command.ExecuteReader();
DataTable dataTable = new DataTable();
datatable.TableName = excelSheetName;
dataTable.Load(oleRdr);
接続文字列を次のように使用しています。
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ExcelData\sample.xls;Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
問題は、日付の値を正しい ( DateTime
) 形式で読み取ることができないことです。すべてが数値形式として扱われると思います。だから私の結果は
6/22/2006 as 38890
インターネットでいくつかの記事を読んだ後、列に複数のデータ型があることがわかり、接続文字列を次のように変更しました。
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ExcelData\sample.xls;Extended Properties="Excel 8.0;HDR=No;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0"";
しかし、それでも私は正しい形式でExcelを読むことができません。これに関する提案。私には奇妙な問題に見えます。さらに情報を提供する必要がある場合はお知らせください。
注: また、Excel ファイルを閉じると、両方の接続文字列から正しいデータが得られることにも注意してください。また、使用している新しいドキュメント形式.xlsx
については、Microsoft.ACE.OLEDB.12.0
.
編集
レジストリも編集してみました....しかし、安心できません。しかし、値を変更した場合IMEX = 0
、またはIMEX = 1
再び正常に機能しています。何が起こっているのか正確に言える人はいますか?
EDIT 2
変更しHDR=Yes
ても、すべてうまくいきました。何か助けてください。インターネットで十分なヘルプを見つけることができませんでした。