2

我正在尝试阅读 PowerPoint 幻灯片。但是当我的程序遇到像 " Vo = Σ CF/(1+t) " 这样的文本时,shape.TextFrame.TextRange.Paragraphs(paraindex,1).Text属性无法正确读取(特别是 Σ 符号和下标 0 (零)与 V)。所以最终的结果是乱码。

[编辑]:我发现 ppt 的创建者使用Insert->Equation of powerpoint 来编写 "Σ CF" 。所以它变成了一个特殊的文本。

[注意]:在不使用 Insert->Equation 工具、[按 Alt+228 和下标选项] 的情况下在文本/等式上方编写我的代码会产生预期的结果。

请建议是否有办法处理使用 Insert->Equation 工具编写的文本/方程。

谢谢你。

4

2 回答 2

0

这不是答案,但注释太短并且不允许代码格式化。
无论如何,这并不完全正确,但可能会让您指向正确的方向。

Dim oSh As Shape
Dim x As Long
Dim y As Long
Dim lMathStart As Long
Dim lMathEnd As Long
Dim oTempShape As Shape

Set oSh = ActiveWindow.Selection.ShapeRange(1)
With oSh.TextFrame2.TextRange

    For x = 1 To .MathZones.Count
        With .MathZones(x)
            lMathEnd = .Characters.Count
            lMathStart = InStr(oSh.TextFrame.TextRange.Text, .Characters)

            Set oTempShape = oSh.Duplicate(1)
            With oTempShape.TextFrame.TextRange
                '.Characters(lMathStart, lMathEnd).Delete
                .Characters(1, lMathStart).Delete
                .Characters(lMathEnd).Delete
            End With

        End With
    Next
End With

逻辑实际上更像是:对于每个数学区域,复制原始形状,然后对于复制形状中的每个数学区域,删除数学区域之前和之后的所有字符,只留下方程式以导出为形状。

于 2013-04-24T14:55:55.520 回答
0

如果您的 SWF 中出现乱码,可能是因为 Flash 不支持 Unicode,或者因为将错误的字符传递到 SWF 中。例如,这将使您了解所选方程式中的内容。请注意,如果您使用 Asc() 而不是 AscW(),则会得到不正确的结果。

Sub WhatsInTheEquation()
    Dim oSh As Shape
    Dim oRng As TextRange2
    Dim sTemp As String
    Dim x As Long

    Set oSh = ActiveWindow.Selection.ShapeRange(1)
    For Each oRng In oSh.TextFrame2.TextRange.Runs
        Debug.Print oRng.Text
        Debug.Print oRng.Font.Name
        Debug.Print "Size: " & oRng.Font.Size
        sTemp = ""
        For x = 1 To Len(oRng.Text)
            sTemp = sTemp & " " & AscW(Mid$(oRng.Text, x, 1))
        Next
        Debug.Print sTemp
    Next

End Sub
于 2013-04-18T14:34:16.410 回答