This project has moved. For the latest updates, please go here.

Exception bei diversen Enums: Der angegebene Wert ist außerhalb des zulässigen Bereichs

Aug 17, 2015 at 7:25 PM
Edited Aug 18, 2015 at 5:58 PM
Hallo zusammen,

ich nutze seit geraumer Zeit NetOffice für diverse Office Automation Projekte und bin wirklich begeistert. Im Moment setze ich eine neue Idee um und bin bei verschiedenen Enums auf das Problem gestoßen, dass ich Werte nicht korrekt zuweisen kann.

Konkreter Fall: NetOffice.OfficeApi.Enums.MsoThemeColorIndex. Hier gibt es den Wert "msoThemeColorMixed", der sowohl von Office als auch von NetOffice zur Verfügung gestellt wird und oft ein Defaultwert ist. Als int repräsentiert ist dieser Wert eine -2. Und genau hier scheint das Problem zu liegen: Ich darf anscheinend keinen negativen Wert zuweisen. Das muss aber zwingend sein, da diverse Enums einen negativen Wert als Default vorsehen.

Gibt es hierfür ggf. einen Workaround?

Vielen Dank und beste Grüße!

Edit: Testbeispiel
[TestMethod]
        public void testEnumError()
        {
            Powerpoint.Application app = new Powerpoint.Application();
            Powerpoint.Presentation pres = app.Presentations.Add(NetOffice.OfficeApi.Enums.MsoTriState.msoCTrue);
            Powerpoint.Slide currentSlide = pres.Slides.Add(1, Powerpoint.Enums.PpSlideLayout.ppLayoutTitleOnly);

            Powerpoint.Shape shape = currentSlide.Shapes.AddShape(NetOffice.OfficeApi.Enums.MsoAutoShapeType.msoShapeRectangle, 100, 100, 100, 100);
            shape.TextFrame2.TextRange.Text = "hello";

            shape.TextFrame2.TextRange.Font.UnderlineColor.ObjectThemeColor = NetOffice.OfficeApi.Enums.MsoThemeColorIndex.msoThemeColorAccent1; //Wert=5; funktioniert
            shape.TextFrame2.TextRange.Font.UnderlineColor.ObjectThemeColor = NetOffice.OfficeApi.Enums.MsoThemeColorIndex.msoNotThemeColor; //Wert=0; Fehler
            shape.TextFrame2.TextRange.Font.UnderlineColor.ObjectThemeColor = NetOffice.OfficeApi.Enums.MsoThemeColorIndex.msoThemeColorMixed; //Wert=-1; Fehler
        }
Edit 2: Ich bekomme inzwischen auch an anderen Stellen exceptions:
Powerpoint.Application app = new Powerpoint.Application();
Powerpoint.Presentation pres = app.Presentations.Add(NetOffice.OfficeApi.Enums.MsoTriState.msoCTrue);
Powerpoint.Slide currentSlide = pres.Slides.Add(1, Powerpoint.Enums.PpSlideLayout.ppLayoutTitleOnly);

Powerpoint.Shape shape = currentSlide.Shapes.AddShape(NetOffice.OfficeApi.Enums.MsoAutoShapeType.msoShapeRectangle, 100, 100, 100, 100);
           
shape.Line.BeginArrowheadLength = NetOffice.OfficeApi.Enums.MsoArrowheadLength.msoArrowheadLengthMedium; //shape.Line.BeginArrowheadLength hat bereits den Wert "msoArrowheadLengthMedium". Weise ich diesen aber nochmal explizit zu bekomme ich eine exception            
Coordinator
Aug 20, 2015 at 1:13 PM
Hallo,

Ich kann Fehler bestätigen, allerdings ist es kein Fehler von NetOffice.
Das Problem tritt auch auf mit den Interop Assemblies und sogar in VBA innerhalb eines Dokuments auf.
Ich habe ein paar Topics gefunden die das gleiche Problem beschreiben, jedoch ohne brauchbare Antwort.
Entweder ist das ein Fehler oder einfach nicht vernünftig dokumentiert welche Bedingungen es braucht damit diese Werte setzbar sind.

Den 2. Fehler schaue ich mir heute noch an.


*Sebastian
Aug 21, 2015 at 10:49 AM
Hi Sebastian,

danke für die schnelle Antwort! habe es auch nochmal angeschaut: Weder Interop noch VBA lassen die Operation zu. Dann muss ich mal schauen, wie man das sinnvoll zwischenspeichern und dennoch zuweisen kann.

Bzgl. meinem 2ten Edit habe ich auch noch in VBA geschaut (Ausgangslage: PPT mit einem Slide mit einem normalen Shape):
Sub test()

    Dim shape As PowerPoint.shape
    
    Set shape = Application.ActivePresentation.Slides(1).Shapes(1)
    
    shape.Line.BeginArrowheadLength = msoArrowheadLengthMedium

End Sub
Obwohl "BeginArrowheadLength" schon den Wert "msoArrowheadLengthMedium" wirft der obere Ausschnitt eine exception... also wirklich sauber ist das dann leider nicht und da kann NetOffice auch nicht lösen was MS verpasst hat ;-)

An der Stelle aber nochmal vielen Dank für dein wirklich super Projekt und auch dein persönliches Engagement, Nutzerfragen so schnell zu beantworten!

Beste Grüße und schon einmal ein schönes Wochenende!