{"id":55000329,"date":"2022-08-01T00:00:00","date_gmt":"2023-03-02T17:03:59","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=329"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ribbons_in_OfficeDokumenten","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Ribbons_in_OfficeDokumenten\/","title":{"rendered":"Ribbons in Office-Dokumenten"},"content":{"rendered":"<p><b>Word, Excel und PowerPoint sind die Office-Anwendungen, mit denen Du Dokumente anzeigen und bearbeiten, aber auch automatisieren kannst. Wenn Du beispielsweise einer Excel-Arbeitsmappe eigene, per VBA programmierte Funktionen hinzuf&uuml;gen m&ouml;chtest, musst Du diese irgendwie aufrufen. Eine Schaltfl&auml;che in einem Excel-Arbeitsblatt ist eine M&ouml;glichkeit. Die Alternative ist, einen entsprechenden Befehl im Ribbon zu platzieren. Wie das gelingt, zeige ich im vorliegenden Artikel. Dabei erf&auml;hrst Du auch einige Dinge rund um die Office Open XML-Formate und wie die Daten in diesen Dokumenten gespeichert sind &#8211; darunter auch die Definitionen von Ribbons und die darin anzuzeigenden Icons.<\/b><\/p>\n<h2>Grundlagen: Das Office Open XML-Format<\/h2>\n<p>Jede Datei, die in einem der <b>Office Open XML<\/b>-Formate gespeichert ist, besteht aus einem Dateicontainer, der auf einer einfachen, komponentenbasierten und komprimierten ZIP-Dateiformatspezifikation aufbaut. Das gilt zum Beispiel f&uuml;r Dateien mit der Dateiendung <b>.docx<\/b>, <b>.xlsx <\/b>oder <b>.pptx<\/b>, aber nat&uuml;rlich auch f&uuml;r verwandte Dokumentformate.<\/p>\n<p>Kern der <b>Office Open XML<\/b>-Formate ist die Verwendung von XML-Referenzschemas und eines ZIP-Containers. Jede Datei setzt sich aus einer Auflistung einer beliebigen Anzahl von Komponenten zusammen. Diese Auflistung definiert das Dokument.<\/p>\n<p>Dokumentkomponenten werden mithilfe des ZIP-Formats in der Containerdatei beziehungsweise dem Paket gespeichert. Bei den meisten Komponenten handelt es sich um XML-Dateien, die in der Containerdatei gespeicherte Anwendungsdaten, Metadaten und sogar Kundendaten beschreiben.<\/p>\n<p>Im Containerpaket k&ouml;nnen andere, Nicht-XML-Komponenten einschlie&szlig;lich Komponenten wie Bin&auml;rdateien, die im Dokument eingebettete Bilder oder OLE-Objekte darstellen, enthalten sein. Zus&auml;tzlich werden durch Beziehungskomponenten die Beziehungen zwischen Komponenten festgelegt.<\/p>\n<p>Dieser Entwurf stellt die Struktur f&uuml;r Office-Dateien dar. W&auml;hrend sich der Inhalt der Datei aus Komponenten zusammensetzt, beschreiben die Beziehungen, wie die einzelnen Komponenten zusammenarbeiten.<\/p>\n<p>Die Zusammensetzung einer Datei nach dem <b>Office Open XML<\/b>-Standard kannst Du Dir ansehen, indem Du ein solches Dokument extrahierst. Dazu gehst Du wie folgt vor &#8211; hier am Beispiel einer neuen, leeren Excel-Datei mit dem Dateinamen <b>Beispiel.xlsx<\/b>:<\/p>\n<ul>\n<li>Benenne die Datei im Windows Explorer in <b>Beispiel.zip <\/b>um.<\/li>\n<li>Best&auml;tige den nun erscheinenden Hinweis mit einem Klick auf die Schaltfl&auml;che <b>Ja<\/b>.<\/li>\n<li>Durch einen Doppelklick auf die Datei wird die Ordnerstruktur ge&ouml;ffnet und die Einzelkomponenten, aus der die Datei besteht, werden angezeigt. Je nach Inhalt der Datei werden nur die tats&auml;chlich ben&ouml;tigten Ordner zur Speicherung einzelner Komponenten erstellt.<\/li>\n<li>Um die Datei wieder in der Office-Anwendung bearbeiten zu k&ouml;nnen, stellst Du einfach den alten Dateinamen wieder her.<\/li>\n<\/ul>\n<p>Wir wollen uns aber zuerst kurz den Inhalt anschauen. Die wichtigsten Daten, also die in den Arbeitsbl&auml;ttern gespeicherten Informationen, finden wir in einem Unterordner namens <b>xl|worksheets<\/b>. In Bild 1 sehen wir  beispielsweise das mit <b>sheet1.xml <\/b>benannte Arbeitsblatt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_04\/pic_329_001.png\" alt=\"Komprimierter Zip-Container einer Excel-Arbeitsmappe\" width=\"649,627\" height=\"312,0542\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Komprimierter Zip-Container einer Excel-Arbeitsmappe<\/span><\/b><\/p>\n<h2>Ribbons anpassen<\/h2>\n<p>Die standardm&auml;&szlig;ig in Office integrierten Ribbons mit ihren Tabs, Groups und Controls wurden von Microsoft so in die interne Anwendungsstruktur integriert, dass eine direkte Bearbeitung durch den Benutzer oder Entwickler &uuml;ber die Benutzeroberfl&auml;che oder auch &uuml;ber ein Objektmodell, wie bei den Men&uuml;- und Symbolleisten von Office 2003 und &auml;lter, nicht m&ouml;glich ist.<\/p>\n<p>Stattdessen formulieren wir die gew&uuml;nschten &Auml;nderungen etwa zum Ausblenden oder Deaktivieren integrierter Elemente oder zum Hinzuf&uuml;gen eigener Tabs, Groups und Controls in das Ribbon nach einem bestimmten Schema in der Auszeichnungssprache XML. Wie ein XML-Dokument zur Anpassung des Ribbons aussieht, ist an dieser Stelle noch gar nicht wichtig &#8211; darum k&uuml;mmern wir uns in weiteren Artikeln. Erstmal interessiert uns, wie man die in einem XML-Dokument formulierten Anpassungen f&uuml;r den Benutzer sichtbar macht.<\/p>\n<p>Dazu gibt es mehrere M&ouml;glichkeiten, die auch davon abh&auml;ngen, in welchem Zusammenhang die Anpassungen g&uuml;ltig sein sollen. Es kann sein, dass der Benutzer eine dauerhafte &Auml;nderung w&uuml;nscht, um etwa Befehle aus dem <b>Datei<\/b>-Men&uuml; direkt im <b>Start<\/b>-Tab einer Office-Anwendung verf&uuml;gbar zu machen, oder eine &Auml;nderung soll nur in Zusammenhang mit einer bestimmten Dokumentvorlage wirksam werden. Vielleicht ist es aber auch nur ein einziges Dokument, wie eine Excel-Datei, die ja prinzipiell eine eigene Anwendung sein kann, das &Auml;nderungen am Ribbon hervorrufen soll.<\/p>\n<p>Wo man nun Hand anlegen muss, um eine Anpassung des Ribbons zu erreichen, h&auml;ngt auch von der Anwendung ab: Bei Excel, Word und PowerPoint kann man dies durch Manipulation des jeweils geladenen Dokuments erreichen (wobei dies auch eine normale oder eine globale Vorlage sein kann), bei Access funktioniert dies ebenfalls &uuml;ber eine, wenn auch anders geartete, Anpassung der geladenen Datei und in Outlook sind schon richtige Programmierkenntnisse gefragt.<\/p>\n<p>Da wir die Vorgehensweise unter Access und Outlook in separaten Artikeln beschreiben, geht es zun&auml;chst zu den <b>Office Open XML<\/b>-Dokumenten, die ohne gro&szlig;en &Auml;nderungsaufwand sowohl als Dokumente als auch als Vorlagen verwendet werden k&ouml;nnen.<\/p>\n<h2>Ribbon-Definition als XML-Datei<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000329\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000329?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000329\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"41a4e68012\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Word, Excel und PowerPoint sind die Office-Anwendungen, mit denen Du Dokumente anzeigen und bearbeiten, aber auch automatisieren kannst. Wenn Du beispielsweise einer Excel-Arbeitsmappe eigene, per VBA programmierte Funktionen hinzuf&uuml;gen m&ouml;chtest, musst Du diese irgendwie aufrufen. Eine Schaltfl&auml;che in einem Excel-Arbeitsblatt ist eine M&ouml;glichkeit. Die Alternative ist, einen entsprechenden Befehl im Ribbon zu platzieren. Wie das gelingt, zeige ich im vorliegenden Artikel. Dabei erf&auml;hrst Du auch einige Dinge rund um die Office Open XML-Formate und wie die Daten in diesen Dokumenten gespeichert sind &#8211; darunter auch die Definitionen von Ribbons und die darin anzuzeigenden Icons.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662022,66042022,44000004,44000036],"tags":[],"yst_prominent_words":[],"class_list":["post-55000329","post","type-post","status-publish","format-standard","hentry","category-662022","category-66042022","category-Loesungen","category-Ribbon_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000329"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000329\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000329"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}