Laden...

Excel-Zeilen bzw. Splaten anzeigen lassen

Erstellt von arakhsh_j vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.105 Views
A
arakhsh_j Themenstarter:in
30 Beiträge seit 2010
vor 13 Jahren
Excel-Zeilen bzw. Splaten anzeigen lassen

also hallo noch mal,

ich habe folgendes Problem ich möchte die spalten einer Excel Datei zum auswählen anzeigen (z. .b die excel-tabelle hat 3 spalten mit thema1 , thema2, thema3 als erste tabellenzeile, diese möchte ich anzeigen lassen).


public static string[] GetColumnNames(string excelFile, string WorksheetName)
    {
	    .
            .  Verbindung zur Datei;
            .
	    connect.Open();

	    
      System.Data.DataTable tab = connect.GetOleDbSchemaTable(
		  OleDbSchemaGuid.Columns, 
		  new object[] {null, nul
l, WorksheetName, null});
	    
      connect.Close();

  	  string[] columnNames = new string[tab.Rows.Count];

	    for (int i = 0; i < tab.Rows.Count; i++) 
	    {
		    columnNames[i] = tab.Rows[i]["Column_Name"].ToString();
  	    }

      
	    return columnNames;
    } 

Danke voraus für Eure Antworten und Tipps!

1.378 Beiträge seit 2006
vor 13 Jahren

Und wo genau ist dein Problem?

A
arakhsh_j Themenstarter:in
30 Beiträge seit 2010
vor 13 Jahren

das komischerweise der o.g. code kann nur die spalten von nur einer bestimmten excel-datei anzeigen, und wenn ihc was anderes lade sihet er nur noch NULL als spalten anzahl!!!

muss ich irgendetwas in esxcel-datei einstellen oder gibts zu mindest ne möglichkeit die einstellungen und informationen von der Exce-Datei anzusehen, die funktioniert!!

1.029 Beiträge seit 2010
vor 13 Jahren

Hallo,

besteht die Möglichkeit, dass Excel sich bei den Dateien
die nicht funktionieren selbst nicht darüber im Klaren ist,
dass das Worksheet aus einer Tabelle besteht ?

Klingt jetzt zwar doof - aber genauso wie Excel fragt bei der
Aktion "als Tabelle formatieren": Hat die Tabelle Überschriften ?

  • Excel hat zwar eine gute Auto- Erkennung - aber es geht nicht
    standardmäßig davon aus, dass deine Daten in eine 2-dimensionale
    Tabelle passen - das muss man schon explizit angeben in vielen Fällen.

Guter Indikator hierfür ist der DropDownFilter in den ColumnHeaders.
(So hat eine richtige Tabelle auszusehen...)

Gruß

Achim

A
arakhsh_j Themenstarter:in
30 Beiträge seit 2010
vor 13 Jahren

hallo danke für eure beiträge, ich habe viel rumprobiert und habe jetzt heraus gefunden wo der hacken ist.

also soweit ich überprüfen konnte kann die OLEDB funktion von oben NUR die Tabellen-Worksheets von alten Excel-Dateien sehen also vor 2000 und alle Tabellen-worksheets die mit Excel 200 und höhere Version erstellt worden sind, werden einfach nicht gelesen und die funktion spuckt dann am ende null tabellen worksheets.

wisst woran es liegen konnte???


public static string[] GetColumnNames(string excelFile, string WorksheetName)
    {
      
      
      OleDbConnection connect = new OleDbConnection(); 
      try
      {

        connect.ConnectionString = "Data Source=" + excelFile +
        ";Provider=Microsoft.Jet.OLEDB.4.0" +
        ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";

      
        connect.Open();
      }
      catch (Exception ex)
      {
        System.Console.WriteLine("falsch"+ex);
      }
	    
      /* hier wird überprüft, ob die worksheets gelesen werden. */
 
     
     System.Data.DataTable neu = connect.GetOleDbSchemaTable(  
      OleDbSchemaGuid.Tables,
      new object[] {null, null, WorksheetName, null}); 

     /* wenn ja spalten lesen und conncetion schliessen . */
      
     
      return columnNames;
    } 


A
arakhsh_j Themenstarter:in
30 Beiträge seit 2010
vor 13 Jahren
habe gefunden

also endlich nach einer seeeehr langen zeit habe ich den fehler gefunden, der o.g. code ist zum größten teil richtig. aber bei excel ist so das er am ende der tabellensheetnamen ein $ zeichen sitzt, also muss der obere code so ergänzt werden:


System.Data.DataTable tab = connect.GetOleDbSchemaTable(
		  OleDbSchemaGuid.Columns, 
		  new object[] {null, null , WorksheetName+"$", null});

gruss arakhsh