Как сформировать массив из таблицы Word - VBA

Узнай цену своей работы

Формулировка задачи:

В Excel, например, можно диапазон ячеек сразу поместить в массив:
Как сделать что-нибудь подобное в программе Word с таблицей? Если по каждой ячейке идти, то код будет очень долго работать. Надо сразу получить как-то всю таблицу, чтобы потом её анализировать. С большими таблицами вообще долго работать в программе Word с помощью VBA.

Решение задачи: «Как сформировать массив из таблицы Word»

textual
Листинг программы
Sub Fill_Table()
Dim tbl As Table
Dim t!, ii&, jj&, s$, w$(), i&
ActiveDocument.Range.Delete
    Set tbl = ActiveDocument.Tables.Add(Selection.Range, 200, 5)
    t = Timer
    Set tbl = ThisDocument.Tables(1) ''' [200*5]
    For ii& = 1 To tbl.Rows.Count
        For jj& = 1 To tbl.Columns.Count
            tbl.Cell(ii&, jj&).Range.Text = CStr(ii& * jj&)
        Next jj&
    Next ii&
    Debug.Print "fill table", Timer - t
    ReDim v(1 To tbl.Rows.Count, 1 To tbl.Columns.Count)
    t = Timer
    For ii& = 1 To tbl.Rows.Count
        For jj& = 1 To tbl.Columns.Count
            s = tbl.Cell(ii&, jj&).Range.Text
            v(ii, jj) = CDbl(Left$(s, Len(s) - 2))
        Next jj&
    Next ii&
    Debug.Print "read table", Timer - t
    t = Timer
    tbl.Range.Copy
                        'Excel должен быть запущен!
    With GetObject(, "excel.application").workbooks.Add(-4167).sheets(1) 'xlwbatworksheet
        .PasteSpecial "Текст", False, False
        v = .usedrange.Value
        .Parent.Close 0
    End With
    Debug.Print "Excel", Timer - t
    t = Timer
    w = Split(tbl.Range.Text, Chr$(13) & Chr$(7))
    For ii& = 1 To tbl.Rows.Count
        For jj& = 1 To tbl.Columns.Count
            v(ii, jj) = CDbl(w(i))
            i = i + 1
        Next jj&
        i = i + 1 'пустой столбец, который всегда есть справа от таблицы
    Next ii&
    Debug.Print "Split table text", Timer - t
Stop    'проконтролировать содержимое v!
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы