1

数日前に質問をしましたが、十分な回答が見つかりませんでした。問題をもう少し分析して、新しいスレッドを作成することにしました。すべきでなかった場合は、お知らせいただくか、質問を閉じてください。

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ても、すべてうまくいきました。何か助けてください。インターネットで十分なヘルプを見つけることができませんでした。

4

1 に答える 1

2

そのため、私は問題を不十分な方法で解決しました。私は分析と実験で気づき、最終的に、MS-Excel で Excel を開き、OleDbDataReader を使用して C# で Excel を読み取ろうとすると、一部がDataTypes正しく読み取られず、残念ながらDateTime私の場合はその 1 つであると結論付けました。

解決策として、現在、Excel ファイルを読み込んでいるときにユーザーに Excel を閉じるように強制しています。Read-onlyExcel が MS-Excel のモードで開いている場合、読み取られたデータはを含むすべてに対して正しいことにさえ気付きました。しかし、 で開くと、データの読み取りが正しくありません。DataTypesDateTimeWrite-Mode

これらは私の分析結果であり、結果が少し奇妙であることは承知しています/同意します。誰かが同意しないか、何か他のことを考えている場合は、私に知らせて、私を修正してください.

于 2012-11-05T07:49:58.597 に答える