簡單地說,因爲無法用Word和Excel記錄宏,所以Powerpoint是自動化(使用VBA)的更復雜的Office應用程序之一。我發現學習對象模型的最好方式是將網頁搜索和對象瀏覽器與VBIDE結合使用(只需按F2鍵)。
至於文字替換,一旦你知道,這是一個容易的情況。您可以遍歷特定幻燈片中的所有形狀,然後檢查該形狀的文本。 (注意,此代碼實際上來自一個Excel工作簿,因此它具有Powerpoint
引用這沒有必要從PowerPoint中:
編輯:史蒂夫使得有關原始編輯一個非常好的問題只能搜索文本框,根據在您的演示文稿設置中,您必須單獨對每種類型的對象進行排序,並在每種類型上實施自定義替換,而不是特別難於僅在後方產生痛苦
另請注意,根據演示文稿的大小,它可能需要一段時間來循環所有的形狀,我也使用了.HasTextFrame
/.HasTable
和.Type
的組合,所以你可以看到兩種類型。
Sub ReplaceTextShape(sFindText As String, sNewText As String, ppOnSlide As PowerPoint.Slide)
Dim ppCurShape As PowerPoint.Shape
For Each ppCurShape In ppOnSlide.Shapes
If ppCurShape.HasTextFrame Then
ppCurShape.TextFrame.TextRange.Text = VBA.Replace(ppCurShape.TextFrame.TextRange.Text, sFindText, sNewText)
ElseIf ppCurShape.HasTable Then
Call FindTextinPPTables(ppCurShape.Table, sFindText, sNewText)
ElseIf ppCurShape.Type = msoGroup Then
Call FindTextinPPShapeGroup(ppCurShape, sFindText, sNewText)
''Note you'll have to implement this function, it is an example only
ElseIf ppCurShape.Type = msoSmartArt Then
Call FindTextinPPSmartArt(ppCurShape, sFindText, sNewText)
''Note you'll have to implement this function, it is an example only
ElseIf ppCurShape.Type = msoCallout Then
'etc
ElseIf ppCurShape.Type = msoComment Then
'etc etc
End If
Next ppCurShape
Set ppCurShape = Nothing
End Sub
然後替換整個演示文稿中的所有文本:
Sub ReplaceAllText(ppPres As PowerPoint.Presentation)
Dim ppSlide As PowerPoint.Slide
For Each ppSlide In ppPres.Slides
Call ReplaceTextShape("Hello", "Goodbye", ppSlide)
Next ppSlide
Set ppSlide = Nothing
End Sub
和示例代碼表中的替換文本:
Sub FindTextinPPTables(ppTable As PowerPoint.Table, sFindText As String, sReplaceText As String)
Dim iRows As Integer, iCols As Integer
With ppTable
iRows = .Rows.Count
iCols = .Columns.Count
For ii = 1 To iRows
For jj = 1 To iCols
.Cell(ii, jj).Shape.TextFrame.TextRange.Text = VBA.Replace(.Cell(ii, jj).Shape.TextFrame.TextRange.Text, sFindText, sReplaceText)
Next jj
Next ii
End With
End Sub
你能使用VBA,而不是C#作爲好?如果是這樣,請添加VBA標籤,以便獲得VBA答案。 –
好主意。我做到了。 –
您是否只有舊的PPT文件或新的PPTX文件? –