Parsen eine Excel-Datei in C #, scheinen die Zellen bei 255 Zeichen abgeschnitten zu bekommen ... wie kann ich damit aufhören?

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

Frage

Ich bin Parsen durch eine hochgeladene Excel-Dateien (.xlsx) in asp.net mit c #. Ich verwende den folgenden Code (vereinfacht):

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] };

Das funktioniert perfekt, und , wenn es etwas länger als 255 Zeichen in der Zelle ist, wird es abgeschnitten werden. Jede Idee, was ich tue, falsch? Danke.

EDIT:. Wenn das Excel-Blatt sehen, es zeigt viel mehr als 255 Zeichen, so dass ich glaube nicht, dass das Blatt selbst begrenzt ist

War es hilfreich?

Lösung

Sind gerade von einem schnellen googeln des Subjekts, scheint es, dass das ist eine Grenze von Excel.

Bearbeiten : Mögliche Abhilfe (leider in VB)

Andere Tipps

Die Lösung!

Ich habe auch diese heute gekämpft. Ich habe es endlich durch Modifizieren einige Registrierungsschlüssel zu arbeiten, bevor die Excel-Tabelle Parsen.

Sie müssen diesen Registrierungsschlüssel aktualisieren, bevor Sie die Excel-Tabelle Parsen:

// 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\

Ändern TypeGuessRows 0 und ImportMixedTypes unter diesem Schlüssel Text. Sie werden auch die Verbindungszeichenfolge enthalten IMEX=1 in den erweiterten Eigenschaften aktualisieren müssen:

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");

Referenzen

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

  

... Zeichen möglicherweise abgeschnitten. So importieren   Daten aus einer Spalte ohne memo   Abschneiden, müssen Sie sicherstellen, dass   die Memospalte mindestens einen der in   abgetastete Zeilen enthält einen Wert länger   als 255 Zeichen, oder müssen Sie   erhöhen, um die Anzahl der Zeilen abgetastet durch   der Fahrer eine solche Reihe aufzunehmen. Sie   kann die Anzahl der Zeilen erhöhen   abgetastet durch Erhöhen des Wertes von   TypeGuessRows unter der   HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel   Registrierungsschlüssel ....

Ich habe stieß auf diesem, und die Lösung, die für mich gearbeitet wurde, die Zellen mit langen Text in die oben in der Tabelle zu bewegen.

Ich habe diesen Kommentar in einem Forum das Thema beschreibt,

  

Dies ist ein Problem mit dem Jet OLE DB-Provider. Es sieht auf den ersten 8 Reihen
  des   Kalkulationstabelle den Datentyp in jeder Spalte zu bestimmen. Wenn die Spalte tut
  nicht enthalten   ein Feldwert über 256 Zeichen in den ersten 8 Reihen , dann nimmt er die
  Datentyp   Text, der eine Zeichenbegrenzung von 256. Die folgenden KB-Artikel hat
  Mehr   Informationen zu diesem Thema: http://support.microsoft.com/kb/281517

Hope diese Hilfe jemand anderes!

Haben Sie versucht, die Spalten Datentyp Einstellung in der Tabelle in Text? Ich glaube, dies zu tun die Zellen erlauben, viel mehr als 255 Zeichen zu enthalten.

[Bearbeiten] Für was es wert ist diesem Dialog mit dem MS- Excel-Team ist eine interessante Lektüre. In den Kommentaren am Ende bekommen sie in einige Diskussionen über die 255 Cutoff. Sie sagen, 12 Excel 32k Zeichen pro Zelle unterstützen kann.

Wenn das wahr ist muss ein Weg sein, um diese Daten zu erhalten. Hier ist zwei Dinge zu berücksichtigen.

  1. In der Vergangenheit habe ich die „IMEX = 1“ Option in meine Verbindungszeichenfolge, um mit Spalten mit gemischten Daten zeigt sich als leer verwendet. Es ist ein gewagtes Spiel, aber Sie könnten, dass ein Versuch geben.

  2. Könnten Sie die Datei auf eine Registerkarte exportieren Flat-File begrenzt? IMHO ist dies der sicherste Weg mit Excel-Daten fertig zu werden, da Excel so viele gotchas hat.

SpreadsheetGear for .NET können lesen und schreiben (und mehr) xls und xlsx Arbeitsmappen und unterstützt die gleiche Einschränkungen als Excel für Text - mit anderen Worten wird es nur funktionieren. Es gibt eine kostenlose Testversion, wenn Sie es einen Versuch geben möchten.

Disclaimer: Ich besitze SpreadsheetGear LLC

In Bezug auf den letzten Beitrag, ich benutze SpreadsheetGear auch und finde, dass es auch von den 255 Zeichen pro Zelle Einschränkung leidet, wenn sie von dem älteren XLS (nicht XLSX) Format zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top