Word Объединенные ячейки

1. FIERYLIONS 222 14.03.13 07:53 Сейчас в теме
Добрый день коллеги.

Очередной день, очередные задачи и соответственно очередные вопросы.

Стоит задача:
С документов формата .doc, .docx нужно считывать данные как с excel. Загнать например в тз и дальше уже с этими данными работать.

Вроде бы все получалось до того момента пока не дошел до объединенных ячеек в таблице ворда тупо обращение к такой ячейке выдает ошибку. Но у меня почему то даже строку получить не может где присутствует объединенная ячейка.

Может есть у кого то опыт как обойти эту проблему?
Или объединить ячейки или как можно прочитать все токи эту строку. Таблицы всегда разные.
Желательно конкретные решения.

Забирание спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FIERYLIONS 222 14.03.13 08:28 Сейчас в теме
Вот пример:
Документ.Application.ActiveDocument.Tables(1).Rows(0)

Документ - это Актив документ ком объекта.
Tables - это таблица в документе ворд (в нашем случаи взяли первую).
Rows - это строки нашей таблицы (по индексу берем первую).

Второй пример:
Документ.Application.ActiveDocument.Tables(1).Rows(0).Cells(1).Range.Text

тут берем текст с ячейки.

Cells - это ячейка (в нашем случаи берем значение с первой ячейки первой строки (инд0)первой таблицы).
3. kapafla 18.07.16 15:02 Сейчас в теме
Вот пример:
Документ.Application.ActiveDocument.Tables(1).Rows(0)

мне выдает ошибку Ошибка при вызове метода контекста (Rows).

мне так же само надо считать данные с таблиц в документе Word, и все классно считывает,
пока не натыкается на объединенные ячейки.
Уже всю голову сломала, что делать.
4. kapafla 18.07.16 15:06 Сейчас в теме
пишу след.текст:
Wk = Новый COMОбъект("Word.Application"); 
	Wk.Visible = Истина; 
	Wk.Documents.Open(ПутьФайла); 
	
	Документ = Wk.ActiveDocument(); 
	//Для н = 1 по Документ.Tables.Count Цикл 
	Table = Документ.Tables(1);
	ЧислоСтолбцов = Table.Columns.Count;
        ЧислоСтрок = Table.Rows.Count; 
Показать

все нахожу, могу в цикле перебрать строки или столбцы, но просто например к строку обратиться не получается, только к ячейке
Table.Cell(а,2).Range.Text

подскажите пожалуйста, как можно решить эту проблему.
5. v3rter 18.07.16 15:23 Сейчас в теме
Интересно, если отловить на этой строке точкой останова, в табло отладчика Документ.Application.ActiveDocument.Tables(1).Rows(0) разворачивается в дерево?
7. user987552 30.11.18 10:34 Сейчас в теме
Как-то тоже пришлось решать подобную задачу.
Пошел по пути:
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/ ).
6. v3rter 18.07.16 17:59 Сейчас в теме
Посмотрите тут: https://dzone.com/articles/how-work-merged-cells-word
Общая идея - циклы Для Каждого вместо циклов по адресам ячеек и
    boolean isHorizontallyMerged = cell.getCellFormat().getHorizontalMerge() != CellMerge.NONE;
    boolean isVerticallyMerged = cell.getCellFormat().getVerticalMerge() != CellMerge.NONE;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот