Autor |
Beitrag |
KuhCommander
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 09.06.11 09:11
Guten Morgen,
ich möchte insgesamt 11 Excel-Tabellen einlesen und dann mit denen arbeiten (logisch, nicht wahr?).
Die Excel-Tabellen hab ich als .csv gespeichert und krieg sie auch eingelesen.
Einmal so:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| StreamReader MG1_1 = new StreamReader(@"C:\Users\XXX\Desktop\MG1.1.csv");
string s = MG1_1.ReadToEnd(); MG1_1.Close();
List<string> dlist = new List<string>(); dlist.Add(s); |
Und weil ich damit nicht weiterkam, hab ich mir ausm Netz noch sowas ähnliches abgeguckt:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| string MG1_1 = @"C:\Users\XXX\Desktop\MG1.1.csv"; string[] tabelle = File.ReadAllLines(MG1_1);
Dictionary<double, string[]> contents = new Dictionary<double, string[]>(tabelle.Length);
int x1 = 0; while (x1 < tabelle.Length) { string[] content = tabelle[x1].Split(new char[] { '\n' }); contents.Add(x1, content); x1++; } |
Mein Problem ist, dass mir irgendwie völlig der Ansatz fehlt, wie ich damit jetzt rechnen kann.
Der Benutzer soll 2 Zahlen, einmal eine Temperatur und einmal einen Druck eingeben.
Das Programm soll in die Tabelle gehen, zwischen den Zahlen interpolieren und die dafür geeignete Class ausgeben.
Meine Idee war das irgendwie mit den Indexen zu machen, allerdings weiß ich nicht, welche Zahlen welche Indexe bekommen, da die Tabellen nicht alle gleich lang sind.
Wäre sehr dankbar, wenn mir da jemand weiterhelfen könnte.
Liebe Grüße
KuhCommander
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
Einloggen, um Attachments anzusehen!
|
|
KuhCommander 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 09.06.11 16:22
Also aktuell siehts bei mir so aus:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| StreamReader MG1_1 = new StreamReader(@"C:\Users\XXX\Desktop\MG1.1.csv"); string[,] dList = new string[20, 7]; string s = MG1_1.ReadToEnd(); int i = 0; int j = 0; string c,d;
while (i < 20) { while (j < 7) { d = s.Substring(0, s.IndexOf(" ")); c = Convert.ToString(d.Length); s = s.Substring(0+c.Length, s.IndexOf("\n")); dList[i, j] = s; j++; } i++; }
textBox3.Text = dList[0, 0]; |
Aber da kommt auch nur mist bei raus
An der Stelle [0,0] krieg ich jetzt die komplette erste Zeile mit 7 Zahlen...
Wenn ich weiter Wander [0,1][0,2][0,...] hackt er mir nur mehr am Anfang ab und
ab [1,0] krieg ich gar keine Ausgabe mehr...
Ich wollte jetzt eig erst füllen bis er aufn Leerzeichen stößt und dann zum nächsten Index geht, angefangen von der Länge des letzten Strings.. Und wenn er aufn Zeilenende stößt, soll er die äußere Schleife eins hochsetzen...
|
|
KuhCommander 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 14.06.11 08:20
wirklich niemand ne idee?
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Mi 15.06.11 06:31
Hallo KuhCommander,
warum exportierst Du die Daten der Excel-Tabellen denn erst als CSV? Ich meine, lese doch einfach direkt aus den Tabellen.
Das Einlesen der CSV geht natürlich auch, macht es aber nicht besser.
Also ich würde so vorgehen, dass ich die Daten von dem Excel-File per OleDb in ein streng typisiertes DataSet lesen würde. Da Du ja auch meinst, dass es 11 Tabellen sind. Und von dort aus dann einfach mit den Daten arbeiten.
Soviel erstmal,
|
|
KuhCommander 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 15.06.11 21:18
|
|
Steve1024
      
Beiträge: 141
Windows 2K, XP, 7 & Server 2003 - 2008; Linux (Ubuntu, Fedora)
D7, D05, D06, D09, DXE
|
Verfasst: Mi 15.06.11 23:04
ADO.NET sollte auch Excel-Dateien verwenden können.
Oder? 
_________________ - posted with HTC HD2 -
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 16.06.11 07:03
Hallo,
KuhCommander hat folgendes geschrieben : | War es nicht so, dass man wenn man die ExcellTabellen direkt einlädt, man auf dem PC wo das Programm läuft dann nicht auch Excell installiert haben muss oder täusch ich mich da jetzt? |
Naja, Excel muss nicht direkt installiert sein. Es reicht, wenn der Jet-Treiber installiert ist.
Aber gut.
Dann würde ich vorschlagen, dass Du die Exceltabellen in eine XML-Datei exportierst. Eine XML-Kalkulationstabelle kannst Du auch ohne XSD-Schema speichern. Und dann hättest Du alle Tabellen mit den Daten in einer Datei. Besser wäre es aber natürlich, wenn auch gleich ein Schema existiert, halt auch für eine Prüfung.
Der Aufbau der exportierten XML-Datei würde dann wie folgt aussehen (stark gekürzt):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| <Worksheet ss:Name="Tabelle1"> <Table ss:ExpandedColumnCount="8" ss:ExpandedRowCount="5" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"> <Row> <Cell><Data ss:Type="String">Temp</Data></Cell> <Cell><Data ss:Type="Number">150</Data></Cell> <Cell><Data ss:Type="Number">300</Data></Cell> <Cell><Data ss:Type="Number">400</Data></Cell> <Cell><Data ss:Type="Number">600</Data></Cell> <Cell><Data ss:Type="Number">900</Data></Cell> <Cell><Data ss:Type="Number">1500</Data></Cell> <Cell><Data ss:Type="Number">2500</Data></Cell> </Row> <Row> <Cell><Data ss:Type="Number">100</Data></Cell> <Cell><Data ss:Type="Number">1</Data></Cell> <Cell><Data ss:Type="Number">2</Data></Cell> <Cell><Data ss:Type="Number">3</Data></Cell> <Cell><Data ss:Type="Number">4</Data></Cell> <Cell><Data ss:Type="Number">5</Data></Cell> <Cell><Data ss:Type="Number">6</Data></Cell> <Cell><Data ss:Type="Number">7</Data></Cell> </Row> </Table> </Worksheet> <Worksheet ss:Name="Tabelle2"> <Table ss:ExpandedColumnCount="8" ss:ExpandedRowCount="1" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"> <Row> <Cell><Data ss:Type="Number">1</Data></Cell> <Cell><Data ss:Type="Number">2</Data></Cell> <Cell><Data ss:Type="Number">3</Data></Cell> <Cell><Data ss:Type="Number">4</Data></Cell> <Cell><Data ss:Type="Number">5</Data></Cell> <Cell><Data ss:Type="Number">6</Data></Cell> <Cell><Data ss:Type="Number">7</Data></Cell> <Cell><Data ss:Type="Number">8</Data></Cell> </Row> </Table> </Worksheet> | Achtung bei leeren Zellen- diese werden nicht mit in die XML geschrieben. Ist die letzte Zelle leer, so fällt sie einfach weg, ist eine Zelle in der Mitte irgendwo leer, so wird das so in die XML geschrieben:
XML-Daten 1: 2: 3:
| <Cell><Data ss:Type="Number">4</Data></Cell> <Cell><Data ss:Type="Number">5</Data></Cell> <Cell ss:Index="8"><Data ss:Type="Number">7</Data></Cell> |
Naja, diese müsste dann halt bloß noch verarbeitet werden...
|
|
KuhCommander 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 16.06.11 10:33
Trashkid2000 hat folgendes geschrieben : |
Der Aufbau der exportierten XML-Datei würde dann wie folgt aussehen (stark gekürzt):
|
Die XML-Datei würde so aussehen? Mit oder ohne das Schema? Weil mein Excel sagt mir wenn ich die Datei als XML speichern will, dass er keinen XML Content sieht und verweigert daher das speichern. Und selbst son Schema erstellen.. schlag mich tot, das sind böhmische Dörfer für mich.
Ich hab mir jetzt ne Datenklasse "DataItem" erstellt und die dann in die List<> geladen, das funktioniert soweit erstmal. Vielleicht nicht die eleganteste Methode, aber mit dem Rest blick ich irgendwie noch nicht so durch :/
Trotzdem danke für die Mühen, vielleicht komm ich irgendwann noch mal auf die XML Geschichte zurück 
|
|
|