Autor Beitrag
av1983
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 20.05.07 00:58 
Hallo,

ich bin ganz neu hier und hoffe dass ihr mir hier weiterhelfen könnt. Ich versuche mit Visual Studio (C#) verzweifelt eine unstrukturierte Excel Tabelle in ein Dataset einzulesen.
Daraus sollen dann einzelne Werte (Zellen) in eine Datenbank exportiert werden.
Excel ist sozusagen die Datengrundlage und ich möchte dann als Beispiel Zelle A3 in das Feld 'Firmenname' und Zelle D8 in das Feld 'Umsatz' der Datenbank schreiben.
Die Exceltabelle liegt leider nicht als strukturierte Datenstruktur vor.

Ich habe ein DataSet erzeugt und die Tabelle eingelesen.

Aber wie kann ich nun auf spezielle Zellen im DataSet zugreifen?
z.B. sinngemäß gib mir Zelle A3 des DataSets

Wisst ihr hier weiter?
Das wäre super nett, 1000 Dank!

av1983
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 20.05.07 10:08 
Hallo,

da ich nicht weiß, wie üblicherweise Excel-Tabellen in ein Dataset eingelesen werden und was Du konkret gemacht hast (Du schweigst Dich darüber völlig aus), kann ich Dir nur allgemein antworten. Auf einen einzelnen Wert in einem Dataset greift man z.B. so zu:
ausblenden C#-Quelltext
1:
string aktuellerWert = (string)MyDataset.Tables[0].Rows[4].Columns[2];					

Es gibt noch viele andere Möglichkeiten, aber wie gesagt: ohne nähere Informationen...

Gruß Jürgen
av1983 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 20.05.07 18:48 
Danke, das probiere ich gleich mal aus.

achso zu meinem Problem an sich. Sorry, dass ich nicht mehr erwähnt hatte, ich dachte es genügt die Info "Dataset".
Der Kunde soll eine Excel Tabelle ausfüllen (z.B. Umsatzzahlen) und diese stehen in speziellen Zellen und sollen in die Datenbank geschrieben werden. Diese entspricht momentan noch einer Access DB.

Die Verbindung baue ich folgendermaßen auf.

ausblenden 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:
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + datei + ";Extended Properties=Excel 8.0;HDR=No;";
            
            DataSet ds = new DataSet();
            System.Data.OleDb.OleDbDataAdapter adapter;


            #region OleDbConnection zu datei aufbauen und in Dataset ds einlesen
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                
                adapter = new OleDbDataAdapter(sql,connection);
                try
                {
                    connection.Open();
                    adapter.Fill(ds);
                }
                catch (Exception e)
                {
                    Functions.handle(e.Message);
                }
                finally
                {
                    connection.Close();
                }
            }
            #endregion

Das sollte ja so funktionieren, oder?
datei ist der Excel-Datei-Pfad.

Noch eine andere Frage an diese Stelle.
Ich schaffe es Datensätze in Access über eine OleDBConnection zu schreiben.
Die Datenbank habe ich allerdings auch als Dataset in mein Projekt integriert.
Wie kann ich nun direkt darauf zugreifen, da die Verbindung ja schon von Visual Studio bzw. .NET verwaltet wird?

Danke und Grüße
av1983
av1983 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 20.05.07 20:11 
Hallo,
also leider funktioniert das nicht.

ausblenden C#-Quelltext
1:
(string) ds.Tables[0].Rows[7].Columns[0];					


Der Fehler:
'System.Data.DataRow' does not contain a definition for 'Columns'

Weiß echt ned mehr weiter.
Was sind denn die anderen Möglichkeiten, um Zelle XY abzurufen?

Danke und Grüße
Av1983

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 20.05.07 20:56 
user profile iconav1983 hat folgendes geschrieben:
Hallo,
also leider funktioniert das nicht.
ausblenden C#-Quelltext
1:
(string) ds.Tables[0].Rows[7].Columns[0];					

Der Fehler:
'System.Data.DataRow' does not contain a definition for 'Columns'

Damit hast Du mich erwischt: Ich hab' es nur so hingeschrieben und nicht in der Doku kontrolliert. (Ich arbeite meist mit typisierten Datasets, weiß also genau, welche Namen meine Tabellen und Spalten haben.) Aber auch Du hattest offensichtlich keine Lust zum Nachlesen.

DataRow.Item-Eigenschaft
ausblenden C#-Quelltext
1:
2:
3:
4:
string aktuellerWert = (string)MyDataset.Tables[0].Rows[4][2];
//  oder in mehreren Schritten:
DataRow row = MyDataset.Tables[0].Rows[4];
string aktuellerWert = (string)row[2];

Jürgen
av1983 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 20.05.07 22:43 
Danke, ich hatte überall nachgelesen,
aber auf das bin ich nicht gestoßen.

Schön, dass es so ein Forum gibt.

1000 Dank.
av1983 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 20.05.07 23:51 
Erstaunlich daran ist,
dass sich nur Strings aus der Tabelle lesen lassen.
Ist in der Zelle eine Zahl enthalten, liefert es gar nichts zurück bzw. ein Objekt vom Typ System.DBnull. Schreibe ich von Hand genau in die abgerufene Zelle einen String funktioniert es.
Erstelle ich eine neue XLS-Tabelle funktioniert es auch,
also ganz normal wie man es erwartet.
Ich komme mir etwas vereppelt vor!?!

Wie kann ich das beheben?
Es muss doch einen Weg geben!?!
Ich hoffe, ihr könnt mir damit auch noch helfen.

Danke.