Laden...

Daten in schon geöffnete Excel Datei schreiben

Erstellt von NeueWelt vor 11 Jahren Letzter Beitrag vor 11 Jahren 6.592 Views
N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren
Daten in schon geöffnete Excel Datei schreiben

Hallo,

ich möchte mit C# Daten in eine bereits geöffnete Datei schreiben(Excel2010).

Es geht dabei um eine Datei die immer wieder aktualisiert werden soll, bisher mache ich es so, dass ich Excel schließen lasse und dann die betreffende Datei mit den aktualisierten Daten neu öffne. Das Funktioniert soweit.

Jetzt möchte es ohne das Schließen schaffen.

Gefunden habe ich dieses Code-Snippet:

Excel.Application app = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
                Excel.Worksheet sh = (Excel.Worksheet)app.ActiveSheet;

damit kann ich eine schon geöffnete Excel-Datei nutzen, funktioniert aber leider nur wenn nur eine Datei geöffnet ist, die nur ein Tabellenblatt enthält.

bei mir kann es jedoch der Fall sein das mehere Excel-Dateien geöffnet sind, und die zu aktualisierende Datei hat auch mehrere Tabellenblätter.

weiß jemand Rat?

danke schonmal für die Mühen

mfg

Gelöschter Account
vor 11 Jahren
N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren

Das ist schon einmal ein Anfang, danke.

aber mir geht es so wie tecla, wie kann ich das zurückgelieferte object, dann schließen(also als Excel Application)

und es ist mir auch nicht klar wie man auf diese Weise erkennt in welches Tabellenblatt man schreibt.

mfg

Gelöschter Account
vor 11 Jahren

Meiner Erinnerung nach kannst du den Proxy aus der ROT direkt in den Interop Typ konvertieren. Bei dem Weg mit Marshal.GetActiveObject machst du es doch genau so.

W
872 Beiträge seit 2005
vor 11 Jahren

Du musst dann entweder mit einem Index oder einem Namen auf Excel.Application.Worksheets zugreifen, wenn Du mehr als ein Sheet hast.

N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren

Hallo,

Die Rückgabewerte aus dem link sind eine Liste aus strings und eine object Variable.

In der Liste stehen die Pfade der geöffneten dateien.

comobjekt = RunningObjectTable.GetRunningCOMObjectByName(Pfad);

der methode übergebe ich den Pfad und erhalte dann:

System._ComObject

in dem snippet von oben verlangt er bei GetActiveObject einen string.

Wenn hier den Pfad aus der liste einfüge kommt der fehler:
Ausnahme von HRESULT: 0x800401F3 (CO_E_CLASSSTRING)

Sebastian könntest du mir bitte zeigen wie man das umwandelt das es funktioniert?

und wegen den worksheets das müsste dann ungefähr so gehn schätze ich:
Excel.Worksheet sh = (Excel.Worksheet)app.Worksheets[X];
oder so ähnlich...

danke

mfg

Gelöschter Account
vor 11 Jahren

Ich habe das ROT Snippet von Rainbird mal modifiziert. Ich glaube so nützt es dir mehr.
Schau einfach nochmal rein: Laufende COM-Objekte abfragen

N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren

Vielen Dank Sebastian,

habs hinbekommen in eine geöffnete Datei mit mehreren Arbeitsblättern zu schreiben.

auf die art rufe ich das auf:

table = RunningObjectTable.GetApplicationInstancesFromROT("QListe.xls", "Workbook");
                    Excel.Workbook wb2 = table[0] as Excel.Workbook;

und so nutze ich die einezlenen Blätter:

Excel.Worksheet worksheet = (Excel.Worksheet)wb2.Worksheets[1];

weiß jetzt nicht sicher ob der Code so schön ist oder richtig gut, aber immerhin funktionierts bei mir so.

danke nochmal

mfg