Forum: PC-Programmierung Excel Name Tabellenblatt auslesen


von Eberhard (Gast)


Lesenswert?

Hallo zusammen,

ich steh vor einem Problem und hoffe das Ihr mir helfen könnt.
ich möchte bei einer Excel Tabelle die einzelen Worksheets auslesen und 
dann mit etwas vergleichen. Aber ich hänge noch bei dem Auslesen.

private string[] GetWorksheetNames(string excelFile)
  {
    OleDbConnection con = new OleDbConnection();
    con.ConnectionString = "Data Source=" + excelFile +
      ";Provider=Microsoft.Jet.OLEDB.4.0" +
      ";Extended Properties=Excel 8.0";

    try
    {
      con.Open();
    }
    catch(OleDbException ex)
    {
      MessageBox.Show(ex.Message);
    }

    DataTable tab = con.GetOleDbSchemaTable(
      OleDbSchemaGuid.Tables,
      new object[] { null, null, null, "TABLE" });

    con.Close();

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

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

    return tableNames;
  }

private void btn_Save_Click(object sender, EventArgs e)
{
        // Wenn die Datei nicht exestiert dann neu erstellen
  if (!File.Exists("c:\\Materialentnahme.xlsx"))
  {
  if (!string.IsNullOrEmpty(tBox_Name.Text) &&
            !string.IsNullOrEmpty(tBox_Porjektnum.Text))
  {
    string worksheet_Name_Projektnummer =
                   tBox_Name.Text + tBox_Porjektnum.Text;


        Export.Save("c:\\Materialentnahme.xlsx",
        worksheet_Name_Projektnummer, Einkauf);
  }

        if (!string.IsNullOrEmpty(tBox_Name.Text) &&
            !string.IsNullOrEmpty(tBox_kostenstelle.Text))
  {
  string worksheet_Name_Kostenstelle =
        tBox_Name.Text + tBox_kostenstelle.Text;

        Export.Save("c:\\Materialentnahme.xlsx",
                    worksheet_Name_Kostenstelle, Einkauf);
  }

        if(File.Exists( "c:\\Materialentnahme.xlsx" ) )
        {
                  string[] str_ExcelTabeleNames =
                        GetWorksheetNames("c:\\Materialentnahme.xlsx");

      System.Console.WriteLine(str_ExcelTabeleNames);
        }
}

von Eberhard (Gast)


Lesenswert?

Ups da war ich zu schnell.

Er hängt bei con.Open(); Es dort gibt es einen error.

von Martin S. (sirnails)


Lesenswert?

Eberhard schrieb:
> Ups da war ich zu schnell.
>
> Er hängt bei con.Open(); Es dort gibt es einen error.

Geht Excel wirklich über eine OLEDB zu öffnen? Ich dachte bis dato, er 
braucht eine Instanz.

von Eberhard (Gast)


Lesenswert?

Martin Schwaikert schrieb:
> Geht Excel wirklich über eine OLEDB zu öffnen? Ich dachte bis dato, er
> braucht eine Instanz.

Kopfkratz Da bin ich mir jetzt nicht sicher.

von netdieter (Gast)


Lesenswert?

http://www.docx4java.org/
Hier wird ihnen geholfen.

von Eberhard (Gast)


Lesenswert?

Verdammt kommt nicht auf die Seite.
Die ist von der Firma gespeert, was hast den da für Schmuddelsachen 
drauf? :D

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein einfacher Weg statt OleDB dürfte die Nutzung der 
Automationsschnittstelle von Office sein, da gibt es ein recht 
umfangreiches und halbwegs brauchbar dokumentiertes Objektmodell, über 
das man auch an nicht-datenbankrelevante Dinge herankommt.

Für Java solltest Du Dir mal JACOB, Scriptom und Groovy ansehen.

von Eberhard (Gast)


Lesenswert?

Hallo
ich sehe es jetzt gerade erst.
Hat es was damit zu tuen, dass ich ein 64 Bit system habe und das nur 
auf 32 Bit läuft?

*Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen 
Computer registriert.*

Ich Programmier halt in C# von Java habe ich recht wenig ahnung... hm 
eher keine.

von Eberhard (Gast)


Lesenswert?

Lösung:

  con.ConnectionString = "Data Source=" + excelFile +
             ";Provider=Microsoft.Jet.OLEDB.4.0" +
             ";Extended Properties=Excel 8.0";

*ändern in:*

        string mExcelCon = @"Provider=Microsoft.ACE.OLEDB.12.0;";


  con.ConnectionString = mExcelCon + "Data Source=" + excelFile +
        ";Extended Properties= " + Convert.ToChar(34).ToString() +
        "Excel 12.0;HDR=Yes" + Convert.ToChar(34).ToString();

von bluppdidupp (Gast)


Lesenswert?

http://blogs.msdn.com/b/farukcelik/archive/2010/06/04/accessing-excel-files-on-a-x64-machine.aspx 
(CASE 2)

...ich würde aber auch eher den anderen Weg gehen ("open excel c#" 
dürfte da in google genügend Treffer bringen)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.