Как определить, что ячейка таблицы Word объединена при помощи C# ?

1 отзыв

word, таблицы, ячейки

Использование библиотеки Microsoft.Office.Interop.Word.dll значительно упрощает жизнь при программировании. Однако, чтобы добиться нужного результата, иногда приходится прибегать к хитрым решениям.

Появилась необходимость разбирать документ Word при помощи языка программирования C#  и при его разборе определять, что считываемая в данный момент ячейка является объединенной. Как такового метода или свойства вида IsMerged  и т.п. в библиотеке не нашлось.

Идея заключается в том, чтобы в нашем простейшем случае, находясь в одной ячейке, «исследовать» последнюю ячейку в строке, в которой находится первая ячейка, на предмет количества столбцов в следующей строке. Эдакий «метод сапера» получился. 🙂

Word объединенная ячейкаНумерация ячеек в Word идет следующим образом: когда в строке нет никаких объединенных ячеек, то нумерация столбцов идет подряд, например, как на рисунке слева (третья строка с ячейками (3,1), (3,2)), если же мы объединили, например, две строки, то первая строка, состоящая из объединенной ячейки и следующей верхней ячейки, будет «полной», а вторая — уже нет и будет состоять из одной нижней не объединенной ячейки в нашем примере (адрес (2,2)).

Таким образом, хочется написать строки вида

Но, увы, все не так просто, в интерфейсе используемой библиотеки нельзя так обращаться к ячейкам, если хотя бы одна из них объединена, в противном случае появится ошибка с текстом «Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали».

Поэтому действуем иначе, как и говорили выше. Будем опираться на информацию, получаемую из последней ячейки строки о следующей строке. Код может быть примерно таким для случая, изображенного на картинке:

Во-первых, мы смотрим, чтобы следующая строка вообще существовала, во-вторых, мы смотрим, какой индекс будет иметь первый столбец следующей строки. Причем наблюдение ведется из последней ячейки строки с потенциально объединенной ячейкой, то есть из ячейки (1,2) на рисунке. Если первый столбец следующей строки имеет индекс 1, то в нашем случае это означает, что нет оснований считать ячейку, находящуюся в строке, ИЗ которой происходит «исследование», объединенной (то есть ячейку (1,1)). В нашем случае это не так, индекс столбца ячейки (2,2) как раз равен 2, следовательно, ячейка (1,1) объединена. Выше описанный путь на рисунке обозначен синими стрелочками.

И для поднятия настроения старенькое видео про Microsoft Office 🙂


Один ответ “Как определить, что ячейка таблицы Word объединена при помощи C# ?”

  1. MichaelKn

    Большое спасибо за помощь в этом вопросе. Я не знал этого.

    Ответить

Оставьте комментарий

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> <img src="" alt="" class="" width="" height="">

http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ab.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ac.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ag.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ah.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ai.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ak.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/am.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/an.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ao.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/aq.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ar.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/at.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/av.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/aw.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ay.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/az.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bb.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bc.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bd.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/be.gif 
больше...