Verfasst von: bletra | 18. April 2011

Excel-Add-In: Ribbon (Teil 2 von 2)

Im ersten Teil dieser Kurzserie zu Excel-Add-Ins habe ich die TaskPane vorgestellt. In Excel wird auf Ribbons gesetzt und so lässt sich leicht jedem Add-In ein Ribbon zuordnen. Ribbons werden in XML definiert. Es gibt hierzu eine brauchbare Unterstützung durch das Template Ribbon Designer. Hiermit lässt sich mit der Toolbox die GUI zusammenbauen. Die Ereignisbehandlung etc. ist vertraut, die Formatierung und Anordnung der Controls hinkt dagegenWPF und WinForm hinterher.

Achtung: Ein Export nach XML ist unvollständig und mühsam, nun muss man die Callbacks manuell kopieren und nachbessern — gut exportiert wird lediglich die GUI.

Hilfreich fand ich das Hands-On-Lab OfficeUICustomization von Microsofts Training-Kit. Mit Hilfe eines Toggle-Buttons im Ribbon, kann man einfach die TaskPane anzeigen oder eben verschwinden lassen, hier zunächst der XML-Code des Ribbons:


Und die zugehörigen Methoden:

public bool IsSnippetsPressed(Office.IRibbonControl control)
{
  return Globals.ThisAddIn.CustomTaskPanes[0].Visible;
}

public void SnippetsToggle(Office.IRibbonControl control, bool value)
{
  Globals.ThisAddIn.CustomTaskPanes[0].Visible = value;
}

Diese Aufteilung, TaskPane mit Textboxen und Toggle im Ribbon ist in Bezug auf Ribbons die favorisierte Variante, d.h. wenn Sie sich die Ribbons in den Office-Produkten ansehen, dann finden Sie dort Buttons, Combo-Boxen, aber keine Textboxen. Im Ribbon sind für sich isolierte Elemente, deren Zustandsänderung direkt umgesetzt werden. Zusammengehörige Eingabeelemente, die dann mit Knopfdruck einen Befehl ausführen, sind unüblich.

Es ist dennoch möglich, wenn auch in Bezug auf Usability nicht empfohlen, die Elemente der Taskpane direkt im Ribbon zu platzieren. Hierzu muss man auf das OnChange der EditBox (so heißen die Textboxen bei Ribbons) reagieren und dabei eine Klassenvariable setzen. Wieder zunächst der XML-Code:

<tab idMso="TabAddIns">
  <group id="group1" label="DB-Import">
<editBox id="txtDb" sizeString="xxxxxxxxxx" label="Database  " showImage="false" />
<editBox id="txtTablename" sizeString="xxxxxxxxxx" label="Tablename" showImage="false" />
<button id="btnImport" onAction="btnImport_Click" label="Import" showImage="false" />
</group>
</tab>

Und die zugehörigen Methoden:

public void txtDb_TextChanged(object sender, string text)
{
  db = text;
}
//tablename analog!
public void btnImport_Click(IRibbonControl control)
{
  Globals.ThisAddIn.ImportData(db, tablename);
}

Wenn Sie, beim RibbonDesigner bleiben, vereinfacht sich der Code zu:

private void btnImport_Click(object sender, RibbonControlEventArgs e)
{
  Globals.ThisAddIn.ImportData(txtDb.Text, txtTablename.Text);
}

Nun können Sie wieder den Debugger starten.

Wie bei allen Projekten, die viel Magic von .Net/VS enthalten, lohnt sich die Erzeugung eines Dependency-Diagrams (Tab Architecture).

Um ein Setup für das Add-In zu erzeugen, müssen Sie in den Eigenschaften des Projekts, den Tab Publish auswählen, ggf. die Prerequisites anpassen und Publish now klicken.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Kategorien

%d Bloggern gefällt das: