我在PowerPoint幻灯片中有一堆文本框。 它们都包含文本。
我需要按顺序对这些文本框进行排序, 这样我就可以遍历这些文本框, 捕获文本, 并将其从左上角到右下导出到CSV文件。
例如,如果我在幻灯片中有4个文本框,则需要捕获其中的文本 文本框,顺序为
将文本框的文本导出到CSV文件的部分代码(我来自互联网)可以正常工作。除了它们故障。
Sub ExportTextToCSV()
Dim oPres As Presentation
Dim oSlides As Slides
Dim oSld As Slide 'Slide Object
Dim oShp As Shape 'Shape Object
Dim sTempString As String
Dim Quote As String
Dim Comma As String
Dim myText As String
Dim myFilePath As String
myFilePath = ".\Export_Textbox.CSV"
Quote = Chr$(34)
Comma = ","
Set oPres = ActivePresentation
Set oSlides = oPres.Slides
For Each oSld In oSlides 'Loop thru each slide
For Each oShp In oSld.Shapes 'Loop thru each shape on slide
'Check to see if shape has a text frame and text
If oShp.HasTextFrame And oShp.TextFrame.HasText Then
myText = Replace(oShp.TextFrame.TextRange.Text, vbCr, vbCrLf)
sTempString = sTempString & Quote & myText & Quote & Comma
End If
Next oShp
'Add new line in CSV
sTempString = sTempString & vbCrLf
'Print the result to file:
Call WriteToTextFileADO(myFilePath, sTempString, "UTF-8")
'Clear the string
sTempString = ""
Next oSld
End Sub
Sub WriteToTextFileADO(filePath As String, strContent As String, CharSet As String)
Set stm = CreateObject("ADODB.Stream")
'if file exist, append
If Len(Dir(filePath)) > 0 Then
stm.Type = 2
stm.Mode = 3
stm.Open
stm.CharSet = CharSet
stm.LoadFromFile filePath
stm.Position = stm.Size
stm.WriteText strContent
stm.SaveToFile filePath, 2
stm.Close
Else
stm.Type = 2
stm.Mode = 3
stm.Open
stm.CharSet = CharSet
stm.WriteText strContent
stm.SaveToFile filePath, 2
stm.Close
End If
Set stm = Nothing
End Sub
根据stackoverflow的帖子“ VBA For each - loop order”,内容为:
“形状在z轴上的位置对应于形状的索引 Shapes集合中的数字。”
我正在考虑在运行之前先创建并运行一个宏,以根据文本框形状的“顶部”和“左侧”属性重新设置所有形状的z顺序 ExportTextToCSV()宏。
在使用ShapeRange或Collection,在幻灯片中添加对EXPORTING SHAPES的引用以及根据其“ Top”和“ Left”属性对它们进行排序时,我遇到了麻烦。
请帮助。谢谢!
答案 0 :(得分:0)
使用ADO创建断开连接的记录集,并使用文本框填充它 名称,文本,顶部和左侧属性,然后按顶部和左侧排序 位置。使用它来填充您的文本文件。参见例如: developer.rhino3d.com/guides/rhinoscript/…– 23小时前的蒂姆·威廉姆斯
有效。感谢您为我指出正确的方向!
如果您不介意,请重新发布您的评论作为答案,以便我将其标记为答案。