none
PowerPoint2007: shape.TextFrame.TextRange.InsertSlideNumber() will nicht RRS feed

  • Frage

  • Hallo Board,

    ich mache gerade meine ersten Erfahrungen mit Add-In-Entwicklung für Office.

    Für PowerPoint 2007 will ich mit C# und VSTO in einer Master-Folie die Funktion zur aktuellen Slide-Nummer platzieren, mittels:

    shape.TextFrame.TextRange.InsertSlideNumber();

    Diese Funktion hat in VBA problemlos funktioniert, mit C# bekomme ich nur folgende Ausgabe auf die Folien:

    <#>

    Was mache ich falsch?

    Jeff

    Montag, 20. Februar 2012 13:39

Antworten

  • Ich hab eine Lösung gefunden, wie man die Einschränkung der InserSlideNumber() Funktion umgehen kann:

    Mir ist aufgefallen, dass folgender Code funktioniert:

    shape.TextFrame.TextRange.Text = "Page: ";

    shape.TextFrame.TextRange.InsertSlideNumber();

    Ausgabe wie gewünscht: "Page: X"

    Was nicht funktioniert, ist, wenn ich im Anschluss noch etwas dranschreibe:

    shape.TextFrame.TextRange.Text = "Page: ";

    shape.TextFrame.TextRange.InsertSlideNumber();

    shape.TextFrame.TextRange.Text += " of " + currentPresentation.Slides.Count; //funktioniert so nicht!

    Die Ausgabe auf den Folien ist dann "Page: <#> of Y". Die SlideNumber wird also nicht aufgelöst.

    Um das "dranschreiben" zu umgehen, welches die SlideNumber-Ausgabe offensichtlich stört, habe ich die SlideNumber einfach zum Schluss noch mitten rein geschrieben:

    shape.TextFrame.TextRange.Text = "Page: ";               
    int slideNumPos = shape.TextFrame.TextRange.Text.Length + 1; //Position merken
    shape.TextFrame.TextRange.Text += " of ";
    shape.TextFrame.TextRange.Text += currentPresentation.Slides.Count;
    shape.TextFrame.TextRange.Characters(slideNumPos, 0).InsertSlideNumber();

    Auf diese Weise bekomme ich die richtige Ausgabe auf die Folien: "Page: X of Y". Juhu!

    Dass die SlidesCount nicht erhöht wird, habe ich umgangen, indem ich die Events für Slide hinzugefügt/gelöscht genutzt habe.

    Auf diese Weise kann ich also in den Masterfolien meinen kleinen Text ausgeben, ohne jede einzelne Folie angreifen zu müssen.

    Danke nochmals für deine Hilfe Bogdan!

    Jeff

    Samstag, 25. Februar 2012 10:39

Alle Antworten

  • Hallo Jeff,

    <#> ist für SlideMaster halt die Standarddarstellung für SlideNumber:. Man braucht die SlideNumber Etikette nicht unbedingt neu einfügen (SlideMaster hat schon eine), sollte man sie bloß sichtbar machen:

    ActivePresentation.Slides.Range.HeadersFooters.Footer.Visible = True
    ActivePresentation.Slides.Range.HeadersFooters.SlideNumber.Visible = True

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.

    Dienstag, 21. Februar 2012 09:21
  • Hallo Bogdan,

    danke für deine Hilfestellung. Das Problem ist aber, dass mir nicht nur im Master, sondern auch in den Folien der Platzhalter <#> angezeigt wird, sogar im Präsentationsmodus.

    Weil ich gerade die Möglichkeit habe, mit einem Profi zu reden: Wie ist denn das Standardverfahren, um folgenden Text auf die Folien zu bringen:

    Seite X von Y

    Ich habe es so gelöst (für jede Masterfolie):

    shape.TextFrame.TextRange.Text = "Seite: " +
    shape.TextFrame.TextRange.InsertSlideNumber();
    shape.TextFrame.TextRange.Text += " von " + currentPresentation.Slides.Count;

    Was mir aber oben genanntes Problem bringt.

    Mit

    ActivePresentation.Slides.Range.HeadersFooters.SlideNumber.Visible = True

    Bekomme ich nur das X - oder kann man das Shape um Text erweitern?

    Liebe Grüße,

    Jeff

    Mittwoch, 22. Februar 2012 09:11
  • Hallo Jeff,

    Das mit SlidesCount (Y) funktioniert leider nicht. Es gibt leider kein Tag fuer die SlidesCount. Wenn man .Slides.Count verwendet, wird der Wert nicht automatisch aktualisiert. Ich wuerde die PresentationOpen Prozedur verwenden um Footer.Text fuer jedes Slide zu aktualisieren:

        Dim s As Slide
        
        For Each s In ActivePresentation.Slides
            s.HeadersFooters.Footer.Visible = True
            s.HeadersFooters.Footer.Text = CStr(s.SlideIndex) + " von " + CStr(ActivePresentation.Slides.Count)
        Next

    Viele Gruesse,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.

    Mittwoch, 22. Februar 2012 10:52
  • Ich hab eine Lösung gefunden, wie man die Einschränkung der InserSlideNumber() Funktion umgehen kann:

    Mir ist aufgefallen, dass folgender Code funktioniert:

    shape.TextFrame.TextRange.Text = "Page: ";

    shape.TextFrame.TextRange.InsertSlideNumber();

    Ausgabe wie gewünscht: "Page: X"

    Was nicht funktioniert, ist, wenn ich im Anschluss noch etwas dranschreibe:

    shape.TextFrame.TextRange.Text = "Page: ";

    shape.TextFrame.TextRange.InsertSlideNumber();

    shape.TextFrame.TextRange.Text += " of " + currentPresentation.Slides.Count; //funktioniert so nicht!

    Die Ausgabe auf den Folien ist dann "Page: <#> of Y". Die SlideNumber wird also nicht aufgelöst.

    Um das "dranschreiben" zu umgehen, welches die SlideNumber-Ausgabe offensichtlich stört, habe ich die SlideNumber einfach zum Schluss noch mitten rein geschrieben:

    shape.TextFrame.TextRange.Text = "Page: ";               
    int slideNumPos = shape.TextFrame.TextRange.Text.Length + 1; //Position merken
    shape.TextFrame.TextRange.Text += " of ";
    shape.TextFrame.TextRange.Text += currentPresentation.Slides.Count;
    shape.TextFrame.TextRange.Characters(slideNumPos, 0).InsertSlideNumber();

    Auf diese Weise bekomme ich die richtige Ausgabe auf die Folien: "Page: X of Y". Juhu!

    Dass die SlidesCount nicht erhöht wird, habe ich umgangen, indem ich die Events für Slide hinzugefügt/gelöscht genutzt habe.

    Auf diese Weise kann ich also in den Masterfolien meinen kleinen Text ausgeben, ohne jede einzelne Folie angreifen zu müssen.

    Danke nochmals für deine Hilfe Bogdan!

    Jeff

    Samstag, 25. Februar 2012 10:39
  • Super!
    Vielen Dank, dass Du die Lösung gepostet hast.
    Viele Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.

    Montag, 27. Februar 2012 09:49