如何用c#从PowerPoint幻灯片中读取复杂方程

本文关键字:读取 复杂 方程 幻灯片 PowerPoint 何用 | 更新日期: 2023-09-27 18:09:22

我正在试着看幻灯片。但是当我的程序遇到像" Vo = Σ CF/(1+t) ", shape. textframe . texrange . paragraph (paraindex,1)。文本属性不能正确读取(特别是Σ符号和下标0(0)带V),因此最终结果是乱码文本。

[EDIT]:我发现这个ppt的制作者用了ppt的Insert->Equation来写"Σ CF"。所以它变成了一个特殊的文本。

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

请建议是否有一种方法来处理使用插入->方程工具编写的文本/方程。

谢谢。

如何用c#从PowerPoint幻灯片中读取复杂方程

如果您的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

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

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

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