3

私はExcelスプレッドシートを使用してきましたが、これまでのところ問題はありませんでした。しかし、Excelファイルを読み込もうとすると、このエラー「合法的なOleAut日付ではありません。」が突然表示されました。誰かが私がこれを修正する方法を知っていますか?これは、Excelを読み取り、データをデータセットに入れるために使用するコードです。以前は正常に機能していましたが、データソースにいくつかの変更(日付を含まない)を行った後、このエラーが表示されました。

var fileName = string.Format("C:\\Drafts\\Excel 97-2003 formats\\All Data 09 26 2012_Edited.xls");
        var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

        var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);

        DataSet Originalds = new DataSet();
        adapter.Fill(Originalds, "Employees"); // this is where the error shows up
4

5 に答える 5

8

この問題の回避策を見つけたので、接続文字列を最新のoleDBプロバイダーに変更しました。

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=YES;'", fileName);

また、Excelデータの最後の行の後の空のスペースが値として読み取られていないことを確認しました。

于 2012-10-11T15:17:04.633 に答える
0

さまざまな日付形式を探します。私の場合、列の1つはdd / mm / yyyy形式で、もう1つはmm / dd/yyyy形式でした。日付形式が修正されると、データのインポートが機能しました。

于 2017-09-21T13:03:22.957 に答える
0

私の場合、テーブルに間違った形式で手動で挿入された日付がありました。それは、2019年1月1日ではなく01/01/0019でした。

于 2019-08-28T08:07:14.397 に答える
0

oledbでExcelを読んでいるときに、この問題が発生します。

Excelでは、最初のレコードの多くの日付列が空であることがわかりました。Excelに6000個のレコードがあり、日付列の1つに最初の4000個の空のセルがあるため、Excelはセルを変換する対象を理解できないため、日付を埋めたダミーレコードを1つ追加し、ファイルを処理しました。または、日付の値が一番上にあるいくつかのレコードを移動できます

于 2021-07-22T17:53:49.937 に答える
0

どうすればこれを修正できますか?Hi!行1のダミー行でデータをジャックし、問題の列を文字列に強制します(この場合のみ、データ型エラーなので、種類に応じて修正を適用します)。

デフォルトでは、データの最初の8行(接続文字列でHDR = Yesの場合はヘッダーなし)を調べてデータ型を決定することにより、各列のデータ型を解釈するデータアダプターの機能を理解する必要があります(オーバーライドできます-はい、オーバーライドがあります-16行への接続文字列に-ほとんど役に立ちません)。

データアダプタは、string / double(実際には単なる文字列列ですが、最初の行がすべてdoubleの場合はアダプタではありません)など、混合データ型の列の文字列をスキップするなど、他の厄介なことを実行できます。この例では、エラーの礼儀を与えることさえありません。

これは、「フリーフォーム」列を含むERPソースからのデータでよく発生します。ユーザー定義の列が通常の容疑者です。他のデータ型の問題で見つけるのは非常に難しい場合があります。私はかつて、最大長が255文字の文字列として入力された列の問題を解決するのにかなりの時間を費やしました。データの奥深くに、その長さを超えてエラーをスローしたセルがありました。

データアダプターの操作で「遺伝子工学」のレベルに進みたくない場合、このような問題を解決する最も速い方法は、データをハイジャックし、問題の列を正しい位置に強制することです。入力します(または正しくない場合は、必要に応じて独自のコードで修正できます)。プランBは、データを顧客/ユーザーに返し、修正するように指示することです。プランBで頑張ってください。プランAではない理由があります。

接続文字列を介した操作およびアダプタに関する同様の問題の詳細-ただし、注意してください。結果は100%確実なものにはなりません。IMEXとHDRの設定を広範囲に変更することをテストしました。プロジェクトをすばやく完了したい場合は、データをハイジャックします。 OleDBと混合Excelデータ型:欠測データ

これは、コンテキストが似ている別の投稿です。時間のかかる解決策のすべてに注意してください。私はまだより良い解決策があると確信していません、そしてそれは単にプログラマーが毎朝キーボードに持ってくる論理に逆らいます。残念ながら、あなたにはやるべき仕事があり、時にはハックしなければなりません。 Excelシートからインポートする際の日時形式の不一致

于 2021-11-05T14:32:20.300 に答える