C# で Excel ファイルを解析すると、セルが 255 文字で切り取られるようです。これを停止するにはどうすればよいですか?
-
06-09-2019 - |
質問
C#を使用してasp.netにアップロードされたExcelファイル(xlsx)を解析しています。次のコードを使用しています(簡略化):
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };
これは完璧に機能します、 しかし セル内に 255 文字を超える文字がある場合、セルは切り取られます。私が何を間違っているのかわかりますか?ありがとう。
編集:Excel シートを表示すると、255 文字をはるかに超える文字が表示されるため、シート自体に制限があるとは思えません。
解決
ただ、対象の迅速なグーグルから、それはエクセルの限界だと思わます。
他のヒント
ソリューション!
私は今日もこれを戦ってきました。私は最終的にそれがExcelのスプレッドシートを解析する前に、いくつかのレジストリキーを変更することで動作するようになっています。
あなたは、Excelのスプレッドシートを解析する前にこのレジストリキーを更新する必要があります:
// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\
// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\
このキーの下にTypeGuessRows
する0
とImportMixedTypes
する変更Text
。また、拡張プロパティでIMEX=1
を含めるように接続文字列を更新する必要があります:
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");
<時間>
参照
http://msdn.microsoft.com/en-us/library/ ms141683.aspxする
...文字が切り捨てられることがあります。 をインポートするには メモ列のデータなし 切り捨て、あなたはそれを確認する必要があります の少なくとも一つでメモ欄 サンプリングされた行は長い値が含まれています 255文字を超える、またはあなたがしなければなりません でサンプリングされた行の数を増やします そのような行を含むように、ドライバ。のあなた 行の数を増やすことができます の値を増加させることによりサンプリング 下TypeGuessRows マイクロソフト\ジェット\ 4.0 \エンジン\エクセルのHKEY_LOCAL_MACHINE \ SOFTWARE \ レジストリキー....
私はこれに出くわしてきた、と私のために働いたソリューションは、スプレッドシートの上部に長いテキストを用いて細胞を移動することでした。
私は、フォーラムでこのコメントは、
問題を記述しましたこれはジェットOLEDBプロバイダとの問題です。これは、最初の 8行の
を見て の スプレッドシートは、各列のデータ・タイプを決定します。列は
ない場合 含みません の最初の 8行の256文字を超えるフィールドの値が、それは
を前提としてい データ・タイプ 256の文字の制限があり、テキスト、次のKB資料を
持っています もっと この問題に関する情報: http://support.microsoft.com/kb/281517する
これは他の誰かを助けるホープ!
スプレッドシート内で列のデータ型をテキストに設定してみましたか?これを行うと、セルに 255 文字をはるかに超える文字を含めることができると思います。
編集]それが価値があるものについて このダイアログ MS-Excel チームとの共同作業は興味深い内容です。下部のコメントセクションでは、255 のカットオフについていくつかの議論が行われています。Excel 12 はセルあたり 32,000 文字をサポートできると言われています。
それが本当であれば、このデータを取得する方法があるはずです。ここで考慮すべき点が 2 つあります。
以前、私は接続文字列で「IMEX=1」オプションを使用して、空として表示される混合データを含む列に対処しました。長期戦ですが、試してみてもいいかもしれません。
ファイルをタブ区切りのフラット ファイルにエクスポートしていただけますか?Excel には非常に多くの問題があるため、これが Excel データを扱う最も信頼できる方法であると私は思います。
スプレッドシートギア.NET の読み取りおよび書き込み(およびそれ以上)することができXLSとワークブックをXLSXおよびそれをサポートしていますExcelなどの制限は、テキストのために - つまりそれだけで動作します。あなたはそれを試してみることにしたい場合は、無料の評価があります。
免責事項:私は自分のスプレッドシートギア社
最後のポストについては、私はまた、スプレッドシートギアを使用し、古いXLS(ないXLSX)形式からの読み取り時、それはまた、細胞制限あたり255文字に苦しんでいることがわかります。