Entschuldigen Sie bitte die große Verspätung, ich hoffe, Sie suchen noch danach. Beachten Sie dies tut NICHT das SDK verwenden - es verwendet lediglich System.IO.Packaging
und Linq (und XML-Literale). Wie auch immer, hier ist, was zu tun ist:
- Erstellen Sie eine Präsentation. Auf Folie 3, fügen Sie 4 Textboxen hinzu.
- Fügen Sie Text in drei von ihnen ein und benennen Sie sie "Probe1", "Probe2" und "Probe3".
- In das letzte Textfeld geben Sie zwei Zeilen ein Text ein und macht diese Zeilen dann zu Aufzählungspunkte. Nennen Sie es "ListSample1".
Das ist alles, was Sie brauchen. Speichern Sie dann die Datei und notieren Sie sich den Pfad, und ändern Sie die filePath
Variable unten, um den Pfad Ihrer Präsentation wiederzugeben.
Führen Sie die folgenden Schritte in einer Konsolenanwendung aus:
Imports System.IO
Imports System.IO.Packaging ''# Add reference to WindowsBase for this
Imports <xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
Imports <xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
Imports <xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
Module Module1
Public Const documentRelationshipType As String = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
Sub Main()
Dim slide, document As XElement
Dim pptPackage As Package = Nothing
Dim slidePart, documentPart As PackagePart
Dim filePath As String = "C:\Users\Me\Documents\visual studio 2010\Projects\FillPowerPoint\FillPowerPoint\sample.pptx"
pptPackage = Package.Open(filePath, FileMode.Open, FileAccess.ReadWrite)
Using pptPackage
Dim documentRelationship As PackageRelationship = pptPackage.GetRelationshipsByType(documentRelationshipType).FirstOrDefault
Dim documentUri As Uri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), documentRelationship.TargetUri)
documentPart = pptPackage.GetPart(documentUri)
document = XElement.Load(New StreamReader(documentPart.GetStream))
Dim slideList = From e In document.<p:sldIdLst>.<p:sldId>
Dim slideIndex As Integer = 3 ''# this is the slide number we want, 1-based
Dim slideReference As String = slideList(slideIndex - 1).@r:id.ToString
slidePart = pptPackage.GetPart(PackUriHelper.ResolvePartUri(documentPart.Uri, documentPart.GetRelationship(slideReference).TargetUri))
slide = XElement.Load(New StreamReader(slidePart.GetStream))
''# Replace just text value in Sample1 textbox
Dim Sample1 = From e In slide.<p:cSld>.<p:spTree>.<p:sp> Where e.<p:nvSpPr>.<p:cNvPr>.@name = "Sample1" Select e.<p:txBody>.<a:p>.<a:r>.<a:t>.SingleOrDefault
Sample1.Value = "new text in sample 1"
''# Replace text and make bold inn Sample2 textbox
Dim Sample2 = From e In slide.<p:cSld>.<p:spTree>.<p:sp> Where e.<p:nvSpPr>.<p:cNvPr>.@name = "Sample2" Select e.<p:txBody>.<a:p>.<a:r>.SingleOrDefault
Sample2.<a:rPr>.SingleOrDefault.Add(New XAttribute("b", 1))
Sample2.<a:t>.SingleOrDefault.Value = "new bold text in sample 2"
''# Replace text and make bold inn Sample2 textbox
Dim Sample3 = From e In slide.<p:cSld>.<p:spTree>.<p:sp> Where e.<p:nvSpPr>.<p:cNvPr>.@name = "Sample3" Select e.<p:txBody>.SingleOrDefault
Sample3.<a:p>.Remove()
Dim newParagraphs As XElement = <placeholder>
<a:p>
<a:r>
<a:rPr lang="en-US" dirty="0" smtClean="0"/>
<a:t>Sample3</a:t>
</a:r>
</a:p>
<a:p>
<a:r>
<a:rPr lang="en-US" smtClean="0"/>
<a:t>With a new paragraph</a:t>
</a:r>
<a:endParaRPr lang="en-US" dirty="0"/>
</a:p>
</placeholder>
Sample3.SingleOrDefault.Add(newParagraphs.Elements)
''# Create a new list of bullets
Dim s() As String = {"Bullet 1", "Bullet 2", "Bullet 3"}
Dim ListSample1 = From e In slide.<p:cSld>.<p:spTree>.<p:sp> Where e.<p:nvSpPr>.<p:cNvPr>.@name = "ListSample1" Select e.<p:txBody>.SingleOrDefault
ListSample1.<a:p>.Remove()
ListSample1.SingleOrDefault.Add(From e In s Select <a:p>
<a:pPr marL="285750" indent="-285750">
<a:buFont typeface="Arial" pitchFamily="34" charset="0"/>
<a:buChar char="•"/>
</a:pPr>
<a:r>
<a:rPr lang="en-US" dirty="0" smtClean="0"/>
<a:t><%= e %></a:t>
</a:r>
</a:p>)
slide.Save(slidePart.GetStream)
End Using
End Sub
End Module
Sorry, ich weiß, dies ist stark auf VB und XML-Literale gewichtet, aber C# sollte in der Lage sein, die gleiche Sache mit einigen Konvertierung Arbeit zu tun.
0 Stimmen
Muss es ein C#-Beispiel sein? Kann es auch vb.net sein?
0 Stimmen
@Otaku - vb.net ist in Ordnung ich kann immer konvertieren
0 Stimmen
Unter der Annahme, dass sich die Anzahl der Textfelder und die Anzahl der Aufzählungspunkte in jedem Feld nicht ändert, können Sie wahrscheinlich eine "Dummy"-PPTX mit Pseudo-Platzhaltertext erstellen, den Sie durch Live-Daten ersetzen werden. Zum Beispiel @Slide1_BulletPoint1@ oder @Slide3_TableCellR1C3@ (Tabelle auf Folie 3, die Zelle in Zeile 1, Spalte 3). Zum Aktualisieren suchen/ersetzen Sie die XML-Datei der Folie, wobei Sie die Pseudo-Platzhalter durch Ihre Live-Daten ersetzen, und speichern Sie sie dann unter einem neuen Dateinamen (damit Ihr Dummy-PPTX nicht durcheinander kommt).