C# で Excel ファイルを解析すると、セルが 255 文字で切り取られるようです。これを停止するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/926453

質問

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 文字をはるかに超える文字が表示されるため、シート自体に制限があるとは思えません。

役に立ちましたか?

解決

ただ、対象の迅速なグーグルから、それはエクセルの限界だと思わます。

編集可能な回避策は(残念ながらVBで)

他のヒント

ソリューション!

私は今日もこれを戦ってきました。私は最終的にそれが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する0ImportMixedTypesする

変更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: //blogs.vertigo.com/personal/aanttila/Blog/archive/2008/03/28/excel-and-csv-reference.aspxする

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 つあります。

  1. 以前、私は接続文字列で「IMEX=1」オプションを使用して、空として表示される混合データを含む列に対処しました。長期戦ですが、試してみてもいいかもしれません。

  2. ファイルをタブ区切りのフラット ファイルにエクスポートしていただけますか?Excel には非常に多くの問題があるため、これが Excel データを扱う最も信頼できる方法であると私は思います。

スプレッドシートギア.NET の読み取りおよび書き込み(およびそれ以上)することができXLSとワークブックをXLSXおよびそれをサポートしていますExcelなどの制限は、テキストのために - つまりそれだけで動作します。あなたはそれを試してみることにしたい場合は、無料の評価があります。

免責事項:私は自分のスプレッドシートギア社

最後のポストについては、私はまた、スプレッドシートギアを使用し、古いXLS(ないXLSX)形式からの読み取り時、それはまた、細胞制限あたり255文字に苦しんでいることがわかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top