Benutzer mit den meisten Antworten
PowerPoint2007: shape.TextFrame.TextRange.InsertSlideNumber() will nicht

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
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
- Als Antwort markiert Bogdan Petru Roiu Montag, 27. Februar 2012 09:47
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.
-
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
-
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.
-
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
- Als Antwort markiert Bogdan Petru Roiu Montag, 27. Februar 2012 09:47
-
Super!
Vielen Dank, dass Du die Lösung gepostet hast.
Viele Grüße,
BogdanIch 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.