Heute will ich berichten, wie man dieses microsoft hands on lab zum rennen bekommt.

ziel ist es, ein office add-in (app) für excel zu bauen, welches beispielhaft einen kreditrechner abbildet, dieser nun nicht wie bisher mit der excel.makro.sprache im excel eingebettet wird, sondern als app mit javascript und einem sandkasten gehosteten webserver arbeitet. aus dem sandkasten heraus ist es der erweiterung nur möglich per html5 mit dem host, in diesem fall dem excel zu kommunizieren.

das ergebnis sieht bei mir so aus:

kreditrechner 

um dieses ergebnis in erster annäherung zu erreichen, ist das abarbeiten der oben angezogenen verlinkten anleitung zu empfehlen. dort ist alles erläutert, und auch für einen nichtprogrammierer zu bewältigen, weil es ja eigentlich nur um copy & paste gehtwinking smile

hiermit kommt man recht zügig voran, je nachdem wie viel zeit darauf verwendet wird, den zu kopierenden text auch zu verstehen, und hat imho bestimmt bei jedem f5 ein neues erfolgserlebnis.

nur leider nach der letzten änderung will das nicht mehr so richtig:

kreditrechner_fehler

irgendwie ist hier die variable binding mit null belegt und hat demzufolge keine anderen eigenschaften zur verfügung zu stellen. es wurde also etwas vergessen nur was und wo? beim suchen fällt auf, dass die globale variable officedoc nirgendwo benutzt wird, also wird wohl officedock und binding irgendwie miteinander mutable verbunden sein sollen.

wir haben im source ein funktion, wo alle initialisierungen ablaufen, nur hier wird mit beiden variablen nicht hantiert, laut vorlage.

eine suche in der office api ergibt, dass das office objekt einen context enthält, welcher wiederum einen verweis auf das document herstellt.

also wird es wohl so gewesen sein: officedoc = office.context.document

damit ist officedoc verwendet und das document hat außerdem einen verweis auf seine bindungen, also wird wohl hier dann folgendes gelten: bindings = officedoc.bindings

dies könnte auch zusammengefast werden zu: bindings = office.context.document.bindings

damit wäre officedoc dann nur wieder nicht initialisiert, und eventuell wird es in einem weiteren beispiel als globale variable benötigt..?

office.initialize = function (reason) {
        $(document).ready(function () {
            app.initialize();
            officedoc = office.context.document;
            bindings = officedoc.bindings;
            oninitializeui();
            createbindings();
        });
    };

soweit so gut mit diesem beispiel, was mich weiter brennend interessiert, wie löse ich diese app von visual studio? bisherige excel macro erweiterungen wurden ja auch mit demm document selber weitergegeben.. bisher wird das excel immer von vs gestartet und die app darin initialisiert. starte ich das excel aus dem datei system wird mir im app iframe ein fehler angezeigt, der mir nicht weiterhilft.

zur lösung dieser frage demnächst mehr..

Comments


Comments are closed