Autor Beitrag
chip777
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Do 08.04.10 14:55 
Ich suche nach einer Möglichkeit, möglichst über OLEDB in Excel Makros zu deaktivieren. Da mein Programm nur auf die xls Datei zugreifen kann, wenn die Makros deaktiviert sind. Falls das dazu führt, dass die Makros danach dauerhaft ausgeschaltet sind, müsste ich natürlich gleich noch eine Möglichkeit haben die vorherigen Einstellungen wieder herzustellen. Das sollte allerdings eher das kleinere Problem sein, falls mir denn jmd helfen und mir sagen kann wie ich die Makros überhaupt ausschalten kann.

Bitte keine Links zu Codebeispielen posten, da ich hier nur begrenzten Internetzugriff habe, also lieber den Code direkt, oder zumindest eine Idee wie es funktionieren könnte.
Hier mal der Code der funktioniert, wenn man Excel manuell öffnet und die Makros ausschaltet:

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:
      private void button4_Click_1(object sender, EventArgs e)
        {
            {
                try
                {
                    dataGridView1.Visible = true;
                    System.Data.OleDb.OleDbConnection MyConnection;
                    System.Data.DataSet DtSet;
                    System.Data.OleDb.OleDbDataAdapter MyCommand;
                    MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\test\\BFW\\test.xls';Extended Properties=Excel 8.0;");
                    MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Funktionsdiagramm$A:Y]", MyConnection);
                    MyCommand.TableMappings.Add("Table""TestTable");
                    DtSet = new System.Data.DataSet();
                    MyCommand.Fill(DtSet);
                    dataGridView1.DataSource = DtSet.Tables[0];
                    MyConnection.Close();
                    button2.Enabled = button5.Enabled = true;
                    button1.Enabled = button4.Enabled = false;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

            }
        }
ThoMa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 3



BeitragVerfasst: Do 08.04.10 15:01 
Hallo,

so ganz verstehe ich Dein Problem nicht. Damit Makros überhaupt zur Ausführung kommen braucht es einen entsprechenden Host, dieser Host dürfte Microsoft Excel sein. Ich kann mir nicht vorstellen, dass eine Abfrage über OleDb zur Ausführung von Makros führt, oder doch?

Also müsste im Umkehrschluss Deine Excel-Mappe, die Du auslesen willst, in Excel geöffnet sein während Du auslesen möchtest. Dann versuch doch mal im Connection String anzugeben, dass Du auf die Arbeitsmappe bzw. das Sheet nur lesenden (readonly) Zugriff haben möchtest.

Vielleicht stehe aber auch ich auf dem Schlauch und interpretiere Deine Fehlerbeschreibung falsch.

Grüße
Thorsten
chip777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Do 08.04.10 15:06 
Ich versuch nochmal das Problem besser zu beschreiben.
Ich wollte über mein Programm eine xls Datei in mein DataGridView laden. Immer wenn ich das versucht habe erschien folgende Fehlermeldung:
"Tabelle hat nicht das erwartete Format". Damit konnte ich aber nichts anfangen, ich habe lange herumprobiert und im Internet gesucht. Durch Zufall hatte ich dann mal die xls Datei im Excel geöffnet und die Makros deaktiviert und plötzlich lief das Programm und es konnte die Daten einlesen.
Ich hab das dann mehrfach getestet und immer wenn ich die Makros deaktiviere läuft alles.
Allerdings möchte ich das nun per Programm lösen, da es sonst nichts bringt, wenn man immer die Datei mit Excel im Hintergrund öffnen udn die Makros deaktivieren muss um an die Daten zu kommen.

Wie genau kann ich das mit dem ReadOnly Zugriff anstellen?
ThoMa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 3



BeitragVerfasst: Do 08.04.10 15:14 
Hallo,

Komisch, komisch...

bitte mal folgende Fragen klären:

1. In welchem Format genau speicherst Du die Arbeitsmappe unter Excel (xls, schon klar - aber was steht in der Dateitypenauswahl im Speichern-Dialog von Excel genau)?
2. Welche Version der Microsoft Data Access Components (MDAC) ist bei Dir installiert, hast Du hier schon die entsprechenden Updates mal probiert?
3. Die Makros sind normale VBA-Makros? Hängen davon einige an dem Open-Ereignis des Workbooks, also der Arbeitsmappe?

Grüße
Thorsten
chip777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Do 08.04.10 15:24 
Hallo Thorsten,

zu 1) Microsoft Office Excel-Arbeitsmappe (*.xls)
zu 2) Keine Ahnung leider, ich bin relativ neu hier, aber ich werd mal den Admin fragen der die Rechner eingerichtet hat, und mich dann nochmal melden, kann sein das ich das morgen erst erfahre.
zu 3) Die Makros sidn normale VBA-Makros ob die im Open-Ereignis hängen werd ich mal noch rausbekommen, aber ich schätze mal schon.
edit: Ich kann die Makros leider nicht näher betrachten, weil dazu ein Kennwort nötig wäre.


Ein Kollege von mir der mit VB programmiert hat die Makros mal allgemein im Excel ausgeschalten, allerdings ist er da nicht über OLEDB sondern über Excel gegangen, dass wollte ich vermeiden, weil der Zugriff über OLEDB schneller ist.
Außerdem müssste ich erst schauen inwieweit man den VB Code in C# Code umwandeln könnte.
chip777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 12.04.10 07:34 
Hi,

ich habe leider immer noch keine Antwort gefunden wie ich Makros in Excel per C# deaktivieren kann, hat denn niemand eine Idee?