Очередной день, очередные задачи и соответственно очередные вопросы.
Стоит задача:
С документов формата .doc, .docx нужно считывать данные как с excel. Загнать например в тз и дальше уже с этими данными работать.
Вроде бы все получалось до того момента пока не дошел до объединенных ячеек в таблице ворда тупо обращение к такой ячейке выдает ошибку. Но у меня почему то даже строку получить не может где присутствует объединенная ячейка.
Может есть у кого то опыт как обойти эту проблему?
Или объединить ячейки или как можно прочитать все токи эту строку. Таблицы всегда разные.
Желательно конкретные решения.
Вот пример:
Документ.Application.ActiveDocument.Tables(1).Rows(0)
Документ - это Актив документ ком объекта.
Tables - это таблица в документе ворд (в нашем случаи взяли первую).
Rows - это строки нашей таблицы (по индексу берем первую).
Второй пример:
Документ.Application.ActiveDocument.Tables(1).Rows(0).Cells(1).Range.Text
тут берем текст с ячейки.
Cells - это ячейка (в нашем случаи берем значение с первой ячейки первой строки (инд0)первой таблицы).
Вот пример:
Документ.Application.ActiveDocument.Tables(1).Rows(0)
мне выдает ошибку Ошибка при вызове метода контекста (Rows).
мне так же само надо считать данные с таблиц в документе Word, и все классно считывает,
пока не натыкается на объединенные ячейки.
Уже всю голову сломала, что делать.
Интересно, если отловить на этой строке точкой останова, в табло отладчика Документ.Application.ActiveDocument.Tables(1).Rows(0) разворачивается в дерево?
Как-то тоже пришлось решать подобную задачу.
Пошел по пути:
1. Формирование перечня существующих ячеек таблицы.
2. Обработка перечня существующих ячеек таблицы.
Перечень существующих ячеек представляет собой список:
1=[1][2][3][4]
2=[1][2][4]
где слева от символа "равно" - номера строк, справа - номера существующих ячеек.
Алгоритм формирования перечня существующих ячеек таблицы достаточно прост:
1. Попытка получить ссылку на 1-ю строку таблицы: vRow:=vTabl.Rows.item(1);
Если все норм, значит, таблица НЕ содержит объединенных по вертикали ячеек.
Если Исключение (Exception), то в таблице есть объединенные по вертикали ячейки.
2. Если объединенных по вертикали ячеек нет, то "стандартная" обработка таблицы.
3. Если объединенные по вертикали ячейки есть, то:
3.1 Получаем кол-во строк в таблице: сRows:=vTabl.Rows.Count;
3.2 Получаем максимально возможно кол-во ячеек (столбцов) в строках таблицы: cCols := vTabl.Columns.Count;
3.3 Цикл по строкам таблицы (nRow от 1 до сRows).
3.3.1 Цикл по НОМЕРАМ ячеек в очередной строке таблицы (nCol от 1 до cCols).
3.3.1.1 Попытка получить ссылку на очередную ячейку в очередной строке vCell:=vTbl.Cell(nRow, nCol);
Если все норм, значит, ячейка существует (добавляем ее в результирующий список, см. выше).
Если Исключение (Exception), то ячейка НЕ существует (пропускаем).
Реализация алгоритма - в Delphi, поэтому здесь исходный текст не привожу (но можно посмотреть в комментариях к статье здесь: http://www.hardforum.ru/t80741/ ).