Autor Beitrag
ffxtidus
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 01.12.10 15:17 
Guten Tag alle zusammen,

ich speicher per OleDB eine Exceltabelle in einen Datatable, das funktioniert alles super.
Mein Problem:
Einige Zellen in der Exceltabelle sind sehr lang und die werden dann nicht komplett gespeichert,
z.B. Zelle F126 dort steht drin:
Format de téléchargement ISO: Certains produits vous permettent de télécharger votre logiciel sous forme de fichier ISO. Il s'agit d'un fichier unique qui regroupe l'ensemble des fichiers d'installation dans un format qui facilite la sauvegarde sur disque DVD ou USB. Par conséquent, si vous souhaitez effectuer une copie de sauvegarde de votre logiciel, vous pouvez télécharger votre logiciel au format ISO, puis utiliser l'outil ISO pour graver le support de sauvegarde. Pour en savoir davantage sur l'outil ISO, veuillez cliquer ici.


In der Datatable ist nun folgender Eintrag gespeichert
Format de téléchargement ISO: Certains produits vous permettent de télécharger votre logiciel sous forme de fichier ISO. Il s'agit d'un fichier unique qui regroupe l'ensemble des fichiers d'installation dans un format qui facilite la sauvegarde sur disqu

Ein großer Teil des Textes wurde einfach nicht mitgespeichert.
Was muss ich da machen ?
Hier ist einmal mein Code, in der ich die Exceltabelle in nen Datatable lade:

// Fill Excelsheet in a Datatable
string connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Test\Mappe1.xlsx" + ";Extended
Properties=\"Excel 12.0 Xml;HDR=No;\"";
OleDbConnection conn = new OleDbConnection(connstr);

conn.Open();
DataTable dtTables = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string strTablename = dtTables.Rows[0]["TABLE_NAME"].ToString();
string strSQL = "SELECT * FROM [" + strTablename + "]";

OleDbCommand cmd = new OleDbCommand(strSQL, conn);

DataTable dtest = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(dtest);

Schonmal vielen Dank :)
ffxtidus Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 01.12.10 17:02 
Mhhh, hab noch weiter gesucht und anscheinend
schafft Oledb pro Zelle nur maximal 255 Zeichen.
Die einzige Lösung die ich gefunden habe war folgende:
support.microsoft.co...scid=kb;en-us;281517
Dort muss etwas in der registry geändert werden und das will ich nicht :D

Welche Methoden gibt es noch um von einer Exceltabelle die Daten in ein Datatable zu laden ?
Bitte kein COM das war leider zu langsam.
Wäre cool wenn ihr mir helfen könntet.
Danke ^^
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 02.12.10 20:45 
Hallo,

habe das Ganze mal ausprobiert. Ja, das ist ja wirklich eine dummes Problem. Aber ich glaube, dass die Beschränkung nicht an OleDb liegt, sondern an Excel. Habe es auch mal mit AdoDb probiert, aber keine Besserung. Nicht mal die Änderung in der Registry hat was gebracht :!:

In einem Forum habe ich dann einen (wenn auch sehr abgefahrenen) Workaround gefunden:
Einfach in die erste Zeile der Spalte einen Text mit mehr als 255 Zeichen eingeben. Und das klappt wirklich! Habe es mal mit 'nem DataReader getestet, aber es dürfte kein Unterschied zum füllen DataTable sein.
Also muss es irgendwie an Excel liegen.

Ich weiß, dass die Lösung eigentlich nicht sehr zufriedenstellend ist.
Aber na ja.

//edit: es hilft leider nichts, wenn Du bloß mal kurz einen langen Text in die Zelle schreibst, dann speicherst, und dann den Text wieder löscht!
Ansonsten ist es im Test auch mal vorgekommen, dass der Text in der Excel-Tabelle auf einmal gekürzt war!?

Ist das Auslesen der Excel-Datei nur eine Notlösung?

Marko
ffxtidus Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 03.12.10 11:11 
Also, es liegt definitiv an Excel, hätte ich irgendwie selbst drauf kommen müssen :D
Excel 2003 kann 255 Zeichen pro Zelle speichern und Excel 2007 + kann Pi mal Daumen 32000 Zeichen speichern pro Zelle.
ffxtidus Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 03.12.10 11:50 
Ihr könntet mir aber doch noch helfen.
Bin leider noch ein Anfänger im Programmieren und joa ich würde jetzt gern am ende eine xlsx Datei erhalten.

Ich hab schon den string mit den ganzen xml codes und mache das mit nem Streamwriter, aber am Ende kommt ne xml raus
könntet ihr mir helfen ?
Ich baue den String auf
"<xml version encoding=\"utf-8\">\r\n<Workbook " +
"xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" +
" xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " +
"xmlns:x=\"urn:schemas- microsoft-com:office:" +
"excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" +
"office:spreadsheet\">\r\n "

usw....

und packe das in nen Streamwriter

StreamWriter SW;
SW = File.CreateText(@"c:\tmp\MyTextFilefilled.xlsx"); //das xlsx am ende bringt jetzt nichts, dort stand vorher xml
SW.WriteLine(xml); // mit nem xlsx ist die Datei unbrauchbar und kann nicht geöffnet werden
SW.Close();

Habt ihr für mein Problem eine Lösung ?