myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Office-Technologien » Excel – Formen (Rechtecke) mit zugewiesenen Makros als Schaltfläche
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Excel – Formen (Rechtecke) mit zugewiesenen Makros als Schaltfläche

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
pollito pollito ist männlich
myCSharp.de-Mitglied

avatar-3521.gif


Dabei seit: 26.02.2010
Beiträge: 143
Entwicklungsumgebung: VS2019, Team Developer 6.2


pollito ist offline

Excel – Formen (Rechtecke) mit zugewiesenen Makros als Schaltfläche

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Ich habe die Aufgabe bekommen, aus einem über Jahre gewachsenen Excel-Formular, welches aus vielen Datenblättern besteht, Daten zu extrahieren. In meinem ganzen Leben habe ich nicht so was Grausiges gesehen: Das Ding ist von mehreren Leuten entwickelt worden, nicht in einer Gruppe, sondern nacheinander, ohne dass irgendjemand jemals etwas dokumentiert hätte. Das nur am Rande...

Nun zu meinem ersten Problem:

Auf dem ersten Arbeitsblatt ist eine eine Liste mit "Schaltflächen", die über die 2. Spalte ("B") platziert wurde. Diese Schaltflächen wurden mit der Form "Rechteck" realisiert. Jeder dieser Schaltflächen wurde zudem ein Makro zugewiesen, welches beim Anklicken auf ein bestimmtes Datenblatt wechselt.
  1. Wie kann ich mit C# auf diese Rechtecke zugreifen?
  2. Kann ich eine Auflistuing der Rechtecke erhalten?
  3. Sollte eine Auflistung möglich sein, wie sind die einzelnen Elemente darin angeordnet? Wild, in der Reihenfolge ihrer Erzeugung oder in der Reihenfolge, in der sie auf dem Datenblatt erscheinen?
Und dann gleich die nächste Frage:

Wenn ich schon so ein Rechteck ermittelt habe, wie komme auf das Makro, das dem Rechteck zugewiesen wurde?

Ich muss mich als Excel-Neuling outen, wenngleich mir die Zugriffstechniken einigermaßen bekannt sind.

Ich hoffe, ich konnte das Problem mehr oder weniger verständlich erklären.

Im Voraus vielen Dank!

LG

René
Neuer Beitrag 06.08.2019 21:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
muhtanten muhtanten ist männlich
myCSharp.de-Mitglied

Dabei seit: 10.11.2008
Beiträge: 53
Entwicklungsumgebung: VS 2015 Enterprise


muhtanten ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin René,

du solltest dir  OpenXML anschauen.
Dort gibt es auch das OpenXML Productivity Tool zum download. Damit kannst du dir die Datei anschauen und herausfinden wie ein Rechteck innerhalb eines Arbeitsblattes gespeichert und auch mit einem Makro verknüpft wird.

Ich habe mal kurz so ein Arbeitsblatt nachgebastelt. Das sieht dann ungefähr so aus:

C#-Code:
Shape shape1 = new Shape(){ Macro = "[0]!Test", TextLink = "" };

Und der zugehörige Xml - Teil:

XML-Code:
<xdr:sp macro="[0]!Test" textlink="">
      <xdr:nvSpPr>
        <xdr:cNvPr id="2" name="Rechteck 1" />
        <xdr:cNvSpPr />
      </xdr:nvSpPr>
      <xdr:spPr>
        <a:xfrm>
          <a:off x="666750" y="209550" />
          <a:ext cx="542925" cy="200025" />
        </a:xfrm>
        <a:prstGeom prst="rect">
          <a:avLst />
        </a:prstGeom>
usw.

Gruß
muhtanten
Neuer Beitrag 07.08.2019 12:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
pollito pollito ist männlich
myCSharp.de-Mitglied

avatar-3521.gif


Dabei seit: 26.02.2010
Beiträge: 143
Entwicklungsumgebung: VS2019, Team Developer 6.2

Themenstarter Thema begonnen von pollito

pollito ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Herzlichen Dank! Allerdings, befürchte ich, findet das nur bei XLSX-Dokumenten Anwendung. Die mir vorliegenden Dokumente sind jedoch XLS-Dokumente, welche in sehr großer Zahl draußen bei Kunden sind.

Gut, ich könnte diese öffnen und dann als XLSX speichern. Ich weiß aber nicht, welche Probleme ich mir damit einhandeln kann. Bisher greife ich über die COM-Schnittstelle auf Excel zu.

Oder meinst du, damit man in das Dokument schauen kann, aber weiterhin das Office-Objektmodell verwenden?

LG

René
Neuer Beitrag 07.08.2019 12:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 980
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

in der Tat keine schöne Aufgabe...^^

Naja - da du via C# mit Excel sprechen sollst - wirst du Interop betreiben müssen.

Grundsätzlich würde ich dir an dieser Stelle die Bibliothek "NetOffice" empfehlen.
(Hier wird u.a. vollautomatisch mit LateBinding gearbeitet - das spart wirklich viele Probleme)

Mit "Shape" hast du das richtige Stichwort zur Interaktion mit Formen bereits erhalten - abseits davon kann ich nur empfehlen immer in Verbinding mit "VBA" nach Code zu suchen - lässt sich leicht in C# umwandeln und es gibt um ein vielfaches mehr an Beispielen. Ab davon - kann man auch immer den Makrorecorder anwerfen und so entsprechendes Verhalten nachbauen...

LG
Neuer Beitrag 07.08.2019 12:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
pollito pollito ist männlich
myCSharp.de-Mitglied

avatar-3521.gif


Dabei seit: 26.02.2010
Beiträge: 143
Entwicklungsumgebung: VS2019, Team Developer 6.2

Themenstarter Thema begonnen von pollito

pollito ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie ich jetzt sehe, hilft mir "Shape" nur bedingt weiter. Der Grund dafür ist, dass diese Formen keinen direkten Bezug zu einer Zeile haben – sie schweben quasi auf dem Arbeitsblatt.

Ich werte Zeilen aus und je nach Ergebnis muss ich über das Makro, welches mit der jeweiligen Form verbunden ist, auf das entsprechende Arbeitsblatt wechseln. Und genau hier sehe ich schwarz, denn die Formen stehen zwar visuell in der jeweils richtigen Zeile, haben aber keine Verbindung dazu.

Ich glaube, ich muss mir hier was anderes überlegen.

Nochmals vielen Dank, eure Tipps haben mich wirklich inspiriert!

LG

René
Neuer Beitrag 07.08.2019 14:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 21.11.2019 09:23