如何用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,下标选项]我的代码产生预期的结果。
请建议是否有一种方法来处理使用插入->方程工具编写的文本/方程。
谢谢。
如果您的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之前和之后的所有字符,只留下要导出为形状的公式。