Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
iluxa1810
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
1

Парсинг таблиц WORD

29.03.2018, 05:37. Просмотров 875. Ответов 5

В общем, написал алгоритм перебора ячеек Cell.
Вроде, все хорошо.
Однако, проблема с объедененными ячейками:

Как я могу понять при переборе, что я работаю с объеденной ячейкой и что я должен позаимствовать значение сверху?
Ну например, что текущая обрабатываемая ячейка относится к такой то группе=> заимствовать значение оттуда-то.

Цель всего этого- затолкать в таблицу Access.
0
Миниатюры
Парсинг таблиц WORD  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2018, 05:37
Ответы с готовыми решениями:

Word: макрос для таблиц. Отформатировать определенный вид таблиц
В документе два вида таблиц. Первый тип таблиц имеет вертикальную шапку сбоку (левый столбец) и...

Парсинг конкретных таблиц
Поиск по форуму смотрел ответа не нашел.По тому спрашиваю новой темой. Имеется ссылка...

Парсинг Word используя булевые операторы
Господа программисты! Помогите, пожалуйста, с информацией, касательно понимая вопроса...

Парсинг документа word с таблицами - перевод в эксель
Ни в коем случае не прошу делать все за меня, просто прошу направить на путь истинный (не в гугл и...

Форматирование таблиц в Word
Здравствуйте! У меня есть куча документов с таблицами на 3 листа. Нужно, чтобы по нажатию кнопки...

5
Homarty
136 / 114 / 27
Регистрация: 12.02.2017
Сообщений: 308
30.03.2018, 11:08 2
Посмотрите в справке свойства MergeArea & MergeCells объекта Range.
0
Аксима
5894 / 1282 / 192
Регистрация: 12.12.2012
Сообщений: 1,004
30.03.2018, 12:54 3
Здравствуйте, iluxa1810,
На данный момент мне в голову приходят следующие варианты решения вашей проблемы:

Вариант первый: при переборе ячеек таблицы Word перехватить ошибку и обратиться к последней успешно полученной ячейке выше.

Вариант второй: скопировать таблицу Word на лист Excel и дальше использовать подход, предложенный Homarty.

Ниже прилагаю код для обоих вариантов.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Parse()
    Dim doc As Document, tbl As Table, c As Cell
    Dim successfullyGot() As Cell
    Dim i As Long, j As Long
    Set doc = ThisDocument
    Set tbl = doc.Tables(1)
    ReDim successfullyGot(1 To tbl.Columns.Count) As Cell
    For i = 1 To tbl.Rows.Count
        For j = 1 To tbl.Columns.Count
            On Error Resume Next
            Set c = tbl.Cell(i, j)
            If Err.Number Then Set c = successfullyGot(j) Else Set successfullyGot(j) = c
            On Error GoTo 0
            Debug.Print Left(c.Range.Text, Len(c.Range.Text) - 2) & " ";
        Next
        Debug.Print
    Next
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub ParseInExcel()
    Dim doc As Document, tbl As Table, eObj, eWbk, eWst, eRng, eCell
    Dim i As Long, j As Long
    Set doc = ThisDocument
    Set tbl = doc.Tables(1)
    tbl.Range.Copy
    Set eObj = CreateObject("Excel.Application")
    Set eWbk = eObj.Workbooks.Add
    Set eWst = eWbk.Sheets(1)
    eWst.Paste
    Set eRng = eWst.Cells(1).CurrentRegion
    For i = 1 To eRng.Rows.Count
        For j = 1 To eRng.Columns.Count
            Set eCell = eRng.Cells(i, j)
            If eCell.MergeCells Then
                Debug.Print eCell.MergeArea.Cells(1).Value & " ";
            Else
                Debug.Print eCell.Value & " ";
            End If
        Next
        Debug.Print
    Next
    eWbk.Saved = True
    eWbk.Close
    Set eWbk = Nothing
    eObj.Quit
    Set eObj = Nothing
End Sub
С уважением,
Аксима
1
iluxa1810
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
31.03.2018, 11:11  [ТС] 4
Цитата Сообщение от Аксима Посмотреть сообщение
На данный момент мне в голову приходят следующие варианты решения вашей проблемы:
Вариант первый: при переборе ячеек таблицы Word перехватить ошибку и обратиться к последней успешно полученной ячейке выше.
Вариант второй: скопировать таблицу Word на лист Excel и дальше использовать подход, предложенный Homarty.
Спасибо.
А сработает ли первый вариант для объеденных столбцов? Смогу ли я однозначно понять, что вот эта объедененная ячейка на самом деле = двум ячейкам из предыдущей строчки?
0
Миниатюры
Парсинг таблиц WORD  
Аксима
5894 / 1282 / 192
Регистрация: 12.12.2012
Сообщений: 1,004
31.03.2018, 15:08 5
Здравствуйте, iluxa1810,
Первый вариант рассчитан на пример, выложенный вами в первом посте.
На случай, если нужно обрабатывать более сложные таблицы, я подготовил более сложный вариант (второй).
И, кстати, вместо того чтобы спрашивать "А сработает ли?", можно просто запустить макрос и посмотреть, сработает ли он .

С уважением,
Аксима
0
iluxa1810
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
01.04.2018, 19:23  [ТС] 6
Цитата Сообщение от Аксима Посмотреть сообщение
Первый вариант рассчитан на пример, выложенный вами в первом посте.
На случай, если нужно обрабатывать более сложные таблицы, я подготовил более сложный вариант (второй).
И, кстати, вместо того чтобы спрашивать "А сработает ли?", можно просто запустить макрос и посмотреть, сработает ли он .
Попробую поиграться.
Странно, что у Word'a отсутствует понятие объединенных ячеек.
Если из ворда можно скопипастить таблицу в Excel, и он замержит корректно все, то все таки что-то должно быть.

Добавлено через 22 часа 38 минут
Цитата Сообщение от Аксима Посмотреть сообщение
tbl.Range.Copy
и
Цитата Сообщение от Аксима Посмотреть сообщение
eWst.Paste
Нельзя никак?

Получается, что я во время работы модуля не смогу ничего копипастить...

Добавлено через 10 минут
Странно то, что если все копипастится так, что в Excel начинают работать свойства,которые показывают что и с чем было объеденено, то значит имеется какой-то алгоритм, по которому все это вычисляется.
0
01.04.2018, 19:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2018, 19:23

Форматирование таблиц в WORD
Есть форматирование таблиц в Word, не знаю как избавится от ошибки 5991 "отсутствует доступ к...

Формирование таблиц Word
Доброго времени суток, господа программеры! Есть небольшая проблемка, пытаюсь ее решить, теперь и с...

Редактирование таблиц в WOrD
Как можно уменьшить время форматирования таблиц ? В данный момент макрос перебирает каждую строку,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru