| 

.NET C# Java Javascript Exception

3
Hallo

Ich habe ein Addin das im Word ein Menü generiert. Wenn man nichts besonderes macht wird die Datei normal.dot immer grösser. Das ist ein bekanntes Problem. Eine Lösung dafür ist, man ändert den CustomizationContext des WordApplication Ojektes. Nach dem erstellen setzt man den Context wieder von menu.dot auf normal.dot zurück. Somit wird die normal.dot nicht grösser. Mit folgender Routine wird ein neuen Context geladen.
private Word.Template GetCustomTemplate()
{
object templatePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase), "Menu.dot").Replace(@"file:\", "");

if (!File.Exists(templatePath as string))
{
return null;
}

object install = true;
word.AddIns.Add(templatePath.ToString(), ref install);
return word.Templates.get_Item(ref templatePath);
}


Im Code wo ich das Menü generiere mache ich es wie folgt.
Word.Template customTemplateTemp = (Word.Template)word.CustomizationContext;
Word.Template newTemplate = null;
//TemplateContext in Sicherheit bringen
newTemplate = GetCustomTemplate();
if (newTemplate != null)
{
word.CustomizationContext = newTemplate;
}
//Menü generieren


Wenn ich das Menü fertig habe setzte ich alls zurück.
//Menü fertig generiert
if (newTemplate != null)
{
((Word.Template)word.CustomizationContext).Saved = true;
word.CustomizationContext = customTemplateTemp;
}


Jetzt gibt es aber Systeme wo das Klickevent der Einträge im Menü nicht ausgelöst wird. Auf anderen aber schon. Ich habe schon die Servicepacks von XP und Office 2002(XP) angeglichen. Bringt nichts. Es werden keine Exceptions geschossen. Nichts.

Wenn ich die Menu.dot lösche, damit sie nicht gefunden wird, dann funktioniert das Manü. Ich bin mir also sicher, der Code für das Menü ist korrekt. Das Event kommt nur nicht wenn man den CustomizationContext auf das Menu.dot umleitet. Aber auch nicht auf allen Systemen.

Bei einem Toolbar Menü gibt es die Probleme nicht. Ein solches wird auch generiert. Aber das funktioniert immer. Egal ob mit CustomizationContext oder ohne.

Hat wer eine Idee warum das Event nicht mehr ausgelöst wird?
14.10.2009
GENiALi 2,5k 1 2 8
1
Ich weiss jetzt schon mal das es am zurücksetzten des Contextes liegt. Sobald wieder Normal.dot dran hängt geht nichts mehr. Aber irgend wie ist das so nicht zu gebrauchen. :-(
GENiALi 15.10.2009
1
OK. Es liegt definitiv daran das der Context wieder zurückgesetzt wird. Ich habe mal als Context den WordApplication.ActiveDocument genommen. Menü blieb stehen bis ich das Dokument geschlossen habe.
GENiALi 15.10.2009
1 Antwort
3
Es könnte so einfach sein. Der ganze Aufwand wäre nicht nötig.
Der Context muss für das Problem gar nicht geändert weden.
Einfach nach dem erstellen des Menüs noch folgende Zeile.
((Word.Template)word.CustomizationContext).Saved = true;
Und schon wird das normal.dot nicht mehr grösser wenn das Menü erstellt wird.
Aber änderungen danach werden wohl noch gespeichert. Alles so wie gewünscht.
15.10.2009
GENiALi 2,5k 1 2 8
1
Ups. Dachte, ich könne den Beitrag jetzt als erledigt setzten. :-)
GENiALi 15.10.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH