2013-08-07 2 views
1

У меня есть таблица в Word, заполненная различными текстами, и некоторые уравнения с использованием Microsoft Equation 3.0.Идентификация, если ячейка содержит уравнение в Word

В настоящее время я пытаюсь прочитать текст из таблицы и создать лист 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 

Ошибка при запуске в уравнении

Есть ли простой способ обойти ячейку с уравнением в ней?

ответ

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. К сожалению, у меня нет опыта в этой области.

EDIT

Чтобы использовать это решение в пределах вашего кода вы можете реализовать его в несколько возможных путей:

а), чтобы проверить, есть ли уравнение в таблице:

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 
+0

Я попытался запустить его: он дает мне ту же ошибку, только из первой ячейки, а не когда программа запускается в ячейку уравнения. –

+0

, какую версию библиотеки Word вы используете? –

+0

Извините, я снова побежал. Он работает, но он не позволит мне получить доступ к свойству Column and Row Cell, потому что таблица объединяет ячейки. Это проблема, потому что я должен воспроизвести эту таблицу в Excel. –

Смежные вопросы