- dr.MIG
- Гуру
- Сообщения: 1441
- Зарегистрирован: 18.12.2004 (Сб) 9:53
- Откуда: г.Ярославль
-
- Сайт
- ICQ
Word. Узнать объединены ли ячейки
Перебираю ячейки в таблице, как узнать является ли текущая ячейка результатом объединения нескольких столбцов?
Salus populi suprema lex
- Alec
- Бывалый
- Сообщения: 275
- Зарегистрирован: 31.08.2008 (Вс) 0:15
- Откуда: Ростов-на-Дону
-
- ICQ
Re: Word. Узнать объединены ли ячейки
Alec » 17.07.2010 (Сб) 21:18
По-моему непосредственно это невозможно. Слишком много условностей — если объединить две ячейки, а потом получившуюся разбить на три, которая будет считаться объединенной?
Сравнением ширин ячеек с ширинами в других строках?
Иногда лучше вовремя остановиться…
И начать заново!
- iGrok
- Артефакт VBStreets
- Сообщения: 4272
- Зарегистрирован: 10.05.2007 (Чт) 16:11
- Откуда: Сетевое сознание
Re: Word. Узнать объединены ли ячейки
iGrok » 17.07.2010 (Сб) 21:37
Alec писал(а):Сравнением ширин ячеек с ширинами в других строках?
А чем это поможет, если
Alec писал(а):…объединить две ячейки, а потом получившуюся разбить на три…
label:
cli
jmp label
- dr.MIG
- Гуру
-
- Сообщения: 1441
- Зарегистрирован: 18.12.2004 (Сб) 9:53
- Откуда: г.Ярославль
-
- Сайт
- ICQ
Re: Word. Узнать объединены ли ячейки
dr.MIG » 17.07.2010 (Сб) 21:58
В общем случае, возможно это и не решаемо. Меня же интересует частный случай. Во вложении пример DOC-файла. Это расписание. Другие варианты не имеют принципиальных отличий и имеют сходную структуру. Задача состоит в том, чтобы из этого общего расписания извлечь расписание для отдельных групп, т.е. в данном случае получить 24 отдельных расписания. Вот и думаю над алгоритмом.
Рассматривал как наиболее простой вариант поставить курсор в верхнюю ячейку и спускаясь на ячейку ниже получить искомое. Однако это движение так же не удается организовать так как появляется ошибка, которую и следует ожидать: «Отсутсвует доступ к отдельным строкам, поскольку таблица имеет ячейки, объежиненные по вертикали.»
- Вложения
-
- sample.zip
- (28.48 Кб) Скачиваний: 194
Salus populi suprema lex
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
Re: Word. Узнать объединены ли ячейки
alibek » 17.07.2010 (Сб) 22:40
В Word-овских таблицах нет такого понятия «объединенной ячейки», какое вкладывается в объединенные ячейки Excel.
Так что считай количество ячеек в строке и складывай их ширину, после чего сравнивай со следующей строкой.
Lasciate ogni speranza, voi ch’entrate.
- viter.alex
- Бывалый
- Сообщения: 221
- Зарегистрирован: 27.07.2008 (Вс) 20:17
- Откуда: Montreal
-
- Сайт
- ICQ
Re: Word. Узнать объединены ли ячейки
viter.alex » 20.07.2010 (Вт) 12:41
Если ячейки объединены по строкам, то можно узнать так (работает только для Selection, но не для Range):
- Код: Выделить всё
ActiveDocument.Tables(1).Range.Cells(1).Select
With Selection
If .Information(wdStartOfRangeRowNumber) <> .Information(wdEndOfRangeRowNumber) Then
MsgBox "Ячейка объединена по " & .Information(wdEndOfRangeRowNumber) - .Information(wdStartOfRangeRowNumber) - 1 & " строкам"
End If
End With
С ячейками, объединёнными по столбцам, так не получится.
Лучше день потерять — потом за пять минут долететь!
- dr.MIG
- Гуру
- Сообщения: 1441
- Зарегистрирован: 18.12.2004 (Сб) 9:53
- Откуда: г.Ярославль
-
- Сайт
- ICQ
Re: Word. Узнать объединены ли ячейки
dr.MIG » 20.07.2010 (Вт) 20:00
Да, я этот код нашел, но интересовало именно объединение по столбцам.
Тогда другой вопрос — можно ли как-то эмулировать переход на ячейку вниз? Или единственный выход — это MoveDown с wdLine и проверкой произошел ли переход к другой ячейке или был переход внутри ячейки?
Salus populi suprema lex
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
В общем, в продолжение своей предыдущей темы по парсингу таблиц Word’a с помощью interop я столкнулся с объединенными ячейками.
Как я могу узнать на сколько ячеек произошло объединение, что бы я мог размножить F3 на N строчек?
Капался в дебаггере в поисках нужного свойства, но что-то не нашел… Да и в интернете поголовно пишут, что такого свойства нет
UPD 1
На одном из ресурсов подкинули вот такую идею(Код на VBA, но легко переписывается на C#):
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
Смысл в том, что из Word все копипастится в Excel, а там уже появляются свойства, которые показывают объединение ячеек-MergeRange
. Проблема в том, что будет занят буфер обмена(самое проблемное на мой взгляд, так как не смогу работать за ПК в момент работы программы иначе покалечу буфер), а так же в том, что подключается второй всадник апокалипсиса-Excel.
Если Excel знает, как представить таблицу из Word и создать свойства, которые показывают, что некая зона объединена, то значит должен иметься какой-то однозначный алгоритм для вычисления этого средствами Word’a.
Даже при сохранении в html-формате пишется кол-во объединенных колонок и строк.
UPD 2
По объединенным строкам я нашел решение, но по колонкам нет. Накидал свое решение, но не думаю, что оно универсально.
Может у кого-то есть еще идеи?
P.S Interop не принципиален, но в приоритете, так как много кода на нем нарисовал.
Если есть решение например для *.DOCX, то я могу сменить формат.
Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Еще…Меньше
Вы можете столкнуться Excel с объединенными ячейками, о которым вы не знаете. Это может быть неприятно, Excel не сортировать данные в столбце, который содержит объединенные ячейки.
Вы можете найти все объединенные ячейки на своем компьютере, а затем отобрять их,выверив эти ячейки.
-
На вкладке Главная выберите Найти и выделить > Найти.
-
Щелкните Параметры > формат .
-
Нажмите кнопку Выравнивание > объединить ячейки >ОК.
-
нажмите кнопку Найти все, чтобы просмотреть список всех объединенных ячеек на данном листе.
При выборе элемента в списке Excel выделит объединенную ячейку на листе. Теперь вы можете ото всех ячеек.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
Как отменить объединение ячеек в ворде
Несколько ячеек таблицы, расположенных в одной строке или в одном столбце, можно объединить. Например, вы можете объединить несколько ячеек по горизонтали, чтобы создать заголовок таблицы, равный по ширине нескольким столбцам.
Выделите ячейки, которые требуется объединить.
В разделе Работа с таблицами на вкладке Макет в группе Объединение выберите команду Объединить ячейки.
Разделение ячеек
Выделите одну или несколько ячеек, которые требуется разделить.
В группе Работа с таблицами на вкладке Макет в группе Слияние выберите команду Разделить ячейки.
Введите число столбцов и строк, на которое следует разбить выделенные ячейки.
Несколько ячеек, расположенных в одной строке или в одном столбце, можно объединить в одну вместе с их содержимым. Например, можно объединить несколько ячеек по горизонтали, чтобы создать заголовок таблицы, равный по ширине нескольким столбцам.
Выделите ячейки, которые нужно объединить.
Совет: Если у вашей таблицы нет границ, можно отобразить сетку. Щелкните любое место таблицы, а затем на вкладке Макет (рядом с вкладкой Конструктор таблиц) выберите команду Отобразить сетку.
На вкладке Макет (рядом с вкладкой Конструктор таблиц) выберите команду Объединить ячейки.
Объединяем ячейки таблицы в Microsoft Word
Мы уже неоднократно писали о возможностях текстового редактора Microsoft Word в целом, и в частности о том, как в нем создавать и изменять таблицы. Инструментов для этих целей в программе имеется довольно много, все они удобно реализованы и позволяют с легкостью справляться со всеми задачами, которые могут выдвигать перед собой большинство пользователей. Одной из таковых является объединение ячеек, и сегодня мы расскажем о ее решении.
Объединение ячеек в Ворде
При создании таблицы в Microsoft Word на ленте (панель управления) появляется группа вкладок «Работа с таблицами». В ее состав входит подвкладка «Макет», инструментарием которой нам с вами и нужно воспользоваться для того, чтобы объединить ячейки.
- Выделите с помощью мышки ячейки в таблице, которые необходимо объединить. Это могут быть как элементы одной строки или столбца, так и диапазон таковых.
Разделение ячеек
Узнав о том, как объединить ячейки созданной в Ворде таблицы, нелишним также будет иметь представление и о том, как выполнить противоположную процедуру – их разделение. Алгоритм действий в данном случае практически такой же.
- Выделите с помощью мышки ячейку (или ячейки), которую вы хотите разбить на несколько. В нашем примере это пара, объединенная в предыдущей части статьи.
Примечание: Даже одну ячейку можно разбить на несколько частей и по горизонтали (строки), и по вертикали (столбцы).
Ячейки будут разделены согласно заданным вами параметрам.
Заключение
Из этой небольшой статьи вы узнали немного больше о работе с таблицами в Microsoft Word, а конкретно о том, как объединять ячейки и/или разделять их.
Мы рады, что смогли помочь Вам в решении проблемы.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.
Как объединить и разъединить ячейки и столбцы в таблице в Ворде: пошаговая инструкция, сочетание клавиш
Статья расскажет, как объединить или разъединить ячейки и столбцы в «Microsoft Word».
В текстовом редакторе «Word» нам открывается множество возможностей, включая создание и оформление таблиц. Таблицы можно расширять, автоматически нумеровать в них строки, нумеровать сами таблицы в одном документе и т.д.
В «Word» достаточно широкий инструментарий для осуществления разных задач с таблицами и текстом. Сегодня мы поговорим о том, как объединять или разделять в «Word 2007/2010/2013/2016» столбцы и ячейки.
Как в «Word» объединить и разъединить ячейки и столбцы в таблице?
- Выделяем мышкой те ячейки в таблице, которые будем объединять (в каждой версии «Word» наименование разделов, пунктов, подпунктов может немного отличаться, но принцип работы с инструментарием остается одинаковым).
Выделяем мышкой те ячейки в таблице, которые будем объединять
- На панели инструментов заходим в раздел «Макет», нажимаем на кнопку «Объединение» и далее – на «Объединить ячейки».
Раздел «Макет», кнопка «Объединение»
- Таким простым действием мы быстро объединили нужные нам ячейки
- Теперь, если мы хотим, наоборот, разъединить ячейки, то действуем обратным способом. Выделяем ячейку, которую хотим разъединить.
Выделяем ячейку для разъединения
- Снова на панели инструментов в разделе «Главная» нажимаем на «Объединение» и теперь уже жмем на «Разделить ячейки».
Заходим в раздел «Макет» — «Разъединить ячейки»
- Далее откроется окошко с предложением выбрать число строк и столбцов, на которые мы хотим разделить нашу ячейку. Выбираем то, что нужно и жмем на «Ок».
Разбиваем ячейку на нужное количество столбцов и строк
- После этого наслаждаемся результатами (на картинке ниже)
Если вы хотите объединить или разделить ячейки с помощью сочетания клавиш, то воспользоваться этим мы не сможем, в силу отсутствия по умолчанию данной функции в «Word». Но вы сможете назначать любые горячие клавиши и команды для них в настройках редактора. Приведенные нами выше способы тоже очень удобны.
When a Word table contains horizontally merged cells, accessing aTable.Columns.First or performing a For Each over aTable.Columns will result in an error.
Is there a way to determine if a table contains horizontally merged cells without resulting in an error?
I’ve read Determine if a Word cell is merged, but that is about detecting if a particular Word table cell is merged, rather than does the whole table have any merged cells.
asked Dec 24, 2010 at 2:09
Found a reference in this article to a Uniform property on the Table object, which will return a false if the table has merged or split cells.
Though this does not indicate if the cells are horizontally or vertically merged (or both), but it’s a start, and the property answers my question.
answered Jan 3, 2011 at 23:41
ReubenReuben
4,1162 gold badges46 silver badges57 bronze badges
Yes, it’s there.
Here is the logical explanation how you will detect vertically merged cells. Horizontally merged cell also can detect, but it will need some more coding.
But, unfortunately, not by calling any WORD VBA method or accessing any property of cell or table. It's by applying successive steps.
Step1:
-> Detect Row Count and Column Count of the table
Step2:
-> Declare an string array with same dimension as table( Dim A$()). Fill each cell of the array with "<m>" string.
Step3:
-> Start from cell(1)
-> Then move cell by cell(Cell.Next method)
-> Get each cells RowIndex and ColumnIndex.
-> Erase the content "<m>" from the array, referenced by this RowIndex and ColumnIndex(A(RowIndex,ColumnIndex)=""
-> Repeat this step until Cell.Next ends.
Step4:
-> Now check each cell of the Array(A$()). Those cells have the"<m>" string, are merged. Merged with immediate top cell.
I've not placed any function or code block. Assume it'll be more easy.
Thanks
Shubhayan
answered Jul 7, 2016 at 11:30