Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Daten von excel auslesen und filtern


annold1986 - Do 11.03.10 12:42
Titel: Daten von excel auslesen und filtern
Hallo bin neu hier und kenne mich mit C# und ADO.NET nicht wirklich aus.
also ich habe folgendes vor,ich versuche eine Exceltabelle mit Visual c# 2008 einzulesen und dann nur die zeilen in denen etwas drinsteht zu filtern und dann ausgeben zu lassen.

Tabelle sieht grob so aus:
zb Spalte : B
1 frei
2 TEXT
3 TEXT
4 frei
5 TEXT

nun will ich nur die zeilen ausgeben lassen in denen TEXT steht also B 2,3 und 5 usw...

folgendes hab ich schon geschrieben:

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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Reflection;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            string connetionString = null;
            OleDbConnection connection;
            OleDbDataAdapter oledbAdapter;
            
             int i;
            connetionString ="Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source=U:\\tabelle1.xlsx;" + "Extended Properties=\"Excel 12.0;HDR=NO\";";

 connection = new OleDbConnection(connetionString);

               
            
           //Einlesen der Daten.... 
                connection.Open();
                DataTable dt = new DataTable();
                oledbAdapter = new OleDbDataAdapter("select * from [Sheet1$B:B]",connection);
              oledbAdapter.Fill(dt);

                oledbAdapter.Dispose();
                connection.Close();

            
                
                for (i = 0; i <= dt.Rows.Count - 1; i++)
                {
                                       
                    MessageBox.Show (dt.Rows[i].ItemArray[0] + "" +dt.TableName);
                }
            
            }}}


danielf - Do 11.03.10 14:36

Hallo,

ich kenne mich nicht mit dem OleDbDataAdapte aus, aber so wie es für mich aussiehst frägst du alle Einträge von dem Sheet1 Spalte B aus?

Sprich es Popen 5 MsgBoxen auf.. die erste leer, 2 mal Text, leer und wieder Text. und du weißt nur nicht wie du nur Text rausfilterst?

Falls dies so ist kannst du in deiner for-Schleife einfach überprüfen ob der string ungleich leer oder null ist.

C#-Quelltext
1:
2:
3:
4:
5:
if (!string.IsNullOrEmpty(dt.Rows[i].ItemArray[0].toString())
{
    // gibt nur nicht leere Felder aus
    MessageBox.Show (dt.Rows[i].ItemArray[0] + "" +dt.TableName);
}


Ich hoffe das hilft dir weiter.

Gruß Daniel


annold1986 - Do 11.03.10 15:23

Haargenau das war mein problem.
vielen dank hat super geklappt.

gibt es auch eine möglichkeit den Spaltennamen dazu auszugeben also dass z.b. angezeigt wird: [B5 TEXT] usw...????


JüTho - Do 11.03.10 15:37

Hallo und noch :welcome:

Für die Abfrage per Oledb wird ja SELECT verwendet, wie du es auch machst. Dazu gibt es eine WHERE-Bedingung, in der z.B. "Spalte ungleich leer" eingetragen wird. Aber wie das beim Excel-Zugriff aussieht, weiß ich nicht (deswegen hatte ich bisher nicht geantwortet).

Den Spaltennamen bekommst du über DataTable.Columns[i].

Übrigens: Eine Einführung in Datenbanken gibt es unter OpenBook VC# [http://openbook.galileocomputing.de/visual_csharp] Kap. 25 ff.

Gruß Jürgen


annold1986 - Fr 12.03.10 09:58

wie sieht es denn bei verbundenen zellen aus also z.b.
hab ich die Zellen A1 und B1 miteinander verbunden. nun steht der text ja nur in der Zelle A1 wenn ich auf B1 zugreife steht nichts drin.
kann ich das irgendwie so programmieren dass der text dann auch bei B1 angezeigt wird?? oder von B1 dann autmatisch auf A1 zugreift??

vielen dank im vorraus