1

我在 Word 中有一个表格,里面有不同的文本,还有一些使用 Microsoft Equation 3.0 的方程式。

我目前正在尝试从表格中读取文本并使用同一个表格创建一个 Excel 工作表。

是否有某种方法可以将 Word 中的方程式标准化为文本?

如果没有,有人知道我如何识别方程式来绕过它吗?

我当前读取表格的代码是这样的:

word = win32.gencache.EnsureDispatch('Word.Application')
word.Visible = False
raw_files = glob('*.docx')
xl = win32.gencache.EnsureDispatch('Excel.Application')
ss = xl.Workbooks.Add()
for f in raw_files:
    word.Documents.Open(f)
    doc = word.ActiveDocument
    for x in xrange(1, doc.Paragraphs.Count+1):
        oText = doc.Paragraphs(x)
        if oText.Range.Tables.Count >0 :
            ph = ss.ActiveSheet
            for r in xrange(1, oText.Range.Tables(1).Rows.Count):
                for c in xrange(1, oText.Range.Tables(1).Columns.Count):
                    if oText.Range.Tables(1).Cell(r,c).Range.Text != None:
                        ph.Cells(r+2,c).Value = oText.Range.Tables(1).Cell(r,c).Range.Text

当我遇到等式时的错误是“请求的成员不存在”。

有没有一种简单的方法可以绕过包含方程式的单元格?

4

1 回答 1

1

如果您正在运行 Word 2010(可能是 2007),您可以通过这种方式检查单元格中是否存在等式(这是表格中每个单元格的完整循环,您可以轻松地将其转换为您的需要,Word-VBA 代码,尝试并为 Word 2010 测试):

Dim eqCell As Cell

For Each eqCell In ActiveDocument.Tables(1).Range.Cells

If eqCell.Range.OMaths.Count > 0 Then

    'if there is any equation this if statement will return true
    'so, this cell should be bypassed
    '**EDIT** how to get row and column number of this cell:

    Dim rowNo As Long
    Dim colNo As Long

    rowNo = eqCell.Range.Information(wdEndOfRangeRowNumber)
    colNo = eqCell.Range.Information(wdEndOfRangeColumnNumber)

    Debug.Print rowNo, colNo

    '**END OF EDIT**
End If
Next

您可以尝试参考OMathFunction Object的某些属性来标准化您的方程。不幸的是,我在这方面没有经验。

编辑

要在您的代码中使用此解决方案,您可以通过几种可能的方式实现它:

a) 检查表中是否有等式:

If oText.Range.Tables(1).Range.OMath.Count > 0 Then ... '>>here is

b)检查您的单元格中是否存在方程式:

If oText.Range.Tables(1).Cell(r,c).Range.OMath.Count > 0 Then ... '>>here is
于 2013-08-07T20:26:04.717 回答