如何从C#中的PowerPoint幻灯片中读取复杂的方程式

时间:2013-04-15 15:12:37

标签: c# .net ms-office powerpoint office-interop

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

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

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

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

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

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