Letysite.ru

IT Новости с интернет пространства
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba объединить ячейки в таблице word

Конференция VBStreets

Весь вкус программирования!

  • Список форумовСмежные технологииVBA
  • Изменить размер шрифта
  • FAQ
  • Вход

Объединение ячеек в таблице Word

Объединение ячеек в таблице Word

Neuromancer » 08.05.2008 (Чт) 16:33

Задача:
Объединить по вертикали несколько ячеек таблицы в файле Word.
Код: Выделить всё Dim wrdApp1 As Word.Application
Dim wrdDoc As Word.Document
Dim sel As Selection

Set wrdApp1 = CreateObject(«Word.Application»)
Set wrdDoc = wrdApp1.Documents.Open(«Шаблон1.doc»)
wrdDoc.Tables(1).Rows(2).Cells(1).Select
Set sel = wrdApp1.Selection
With sel
.MoveDown Unit:=wdLine, count:=1, Extend:=wdExtend
.Range.Cells.Merge
End With

Что неверно ? Ячейки выделяются, но не объединяются.

Neuromancer » 08.05.2008 (Чт) 16:58

.Cells.Merge вместо Range.Cells.Merge и все работает.

Сорри за беспокойство.

Neuromancer » 11.05.2008 (Вс) 21:19

Теперь столкнулся с новой проблемой.

Выделил ячейки, объединил. Теперь хочу объединить в другом столбце, но любое действие с таблицей вызывает ошибку.
Код: Выделить всё Dim wrdApp1 As Word.Application
Dim wrdDoc As Word.Document
Dim sel As Selection

Set wrdApp1 = CreateObject(«Word.Application»)
Set wrdDoc = wrdApp1.Documents.Open(«Шаблон1.doc»)
wrdDoc.Tables(1).Rows(2).Cells(1).Select
Set sel = wrdApp1.Selection
With sel
.MoveDown Unit:=wdLine, count:=1, Extend:=wdExtend
.Range.Cells.Merge
End With
wrdDoc.Tables(1).Rows(2).Cells(2).Select

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

Neuromancer » 05.06.2008 (Чт) 12:08

Через «Add Watch..» обратил внимание на поле Last объекта Table. Там написано «В таблице есть объеденения по вертикали, поэтому доступ к отдельным строкам запрещен». В документации или в help я этого нигде не нашел. Задачу решил выделением строки поячеечно.
Пишу тем кто возможно столкнется с похожей проблемой.

Код: Выделить всё wrdDoc.Tables(1).Cell(tbl.Rows.count, 1).Select
Set sel = tbl.Application.Selection
With sel
.MoveEnd Unit:=wdColumn, count:=17
.Cells.Delete
End With

Vlassoff » 06.06.2008 (Пт) 14:06

alibek » 06.06.2008 (Пт) 14:25

Vlassoff » 06.06.2008 (Пт) 14:36

alibek » 06.06.2008 (Пт) 14:50

Vlassoff » 06.06.2008 (Пт) 16:24

Я в цикле атрибуты ячеек выводил. Количесто ячеек:

Код: Выделить всё Sub АтрибутыЯчеек()

Set Таб = Selection.Tables(1)
k = 1
Строк = Таб.Rows.Count
Столбец = Таб.Columns.Count
Таб.Cell(1, 1).Range.Select

Debug.Print «Строк: «; Строк
Debug.Print «Столбцов: «; Столбец

For i = 1 To Строк
For j = 1 To Столбец
Debug.Print «(» & Selection.Information(wdStartOfRangeRowNumber) & «;» & Selection.Information(wdStartOfRangeColumnNumber) & «)»;
If Not ((i = Строк) And (j = Столбец)) Then Selection.MoveRight Unit:=wdCell
Next j
Debug.Print
Next i

Вот что получалось. Певый массив до объеденения. Второй после.

Можете попробовать.

Neuromancer » 02.07.2008 (Ср) 15:41

Проблема была в другом. Я объединял ячейки в одной строке или столбце, после этого добавлял новые строки, и уже в них не мог обращаться к строке таблицы. Пришлось перейти к обращению вида Cell(x,y). Как я понял, объединив в таблице ячейки один раз, я теряю возможность обращаться к элементам таблицы через Column(i) или Row(i), что мне кажется странным.
Все свои проблемы я решил
Даже научился объединять ячейки в столбце при переходе на новую страницу. Для справки, если я пытаюсь объединить ячейки в столбце и конец объединения попадает на следующую страницу, то я получаю ошибку. Так что надо отслеживать этот момент и объединять до конца текущей страницы и с начала следующей до конца. Кому интересно могу написать сюда пример кода.

Как объединить и разделить таблицы и ячейки в Word

Как объединить ячейки в таблице ворд

Объединение ячеек в таблице объединяет две или более смежные ячейки одного размера в большую ячейку.

Прежде всего, выберите ячейки, которые вы хотите объединить. Они могут быть соседними ячейками в строке или столбце.
Или они могут быть смежными ячейками, которые простираются на несколько строк и столбцов.

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

Если вы предпочитаете использовать меню, вы также можете открыть вкладку «Макет» таблицы инструментов, а затем нажать кнопку «Объединить ячейки».

Как в ворде разделить ячейки в таблице

Разделение ячеек таблицы в Word немного сложнее, чем их объединение. Вы можете использовать команду разбиение для одной или нескольких ячеек в определенном количестве строк и столбцов. Вот как это работает.

Мы начинаем говорить, что мы разделяем только одну клетку на две. Сначала выберите ячейку, которую вы хотите разделить.

Затем нажмите на выбранную ячейку правой кнопкой мыши и выберите опцию «Разделить ячейки» в контекстном меню. (Если хотите, вы также можете перейти к разделу «Инструменты»> «Макеты»> «Разделить ячейки» на многофункциональной панели Word.)

Это открывает окно «разбиение ячеек». По умолчанию установлено разделение выбранных ячеек на две колонки, что и нам нужно. Вы можете просто пойти дальше и нажать кнопку «ОК», чтобы сделать разделение. Введите количество строк и столбцов, которые вы хотите разделить.

Читать еще:  Grant type password

Как разделить таблицу в ворде

Вся таблица может быть разделена на несколько. Это может быть полезно для разделения длинных таблиц на две отдельные таблицы — в основном в надежде решить проблемы с форматированием, которые иногда могут вызывать многостраничные таблицы.

Сначала щелкните, чтобы поместить точку вставки в ячейку, в которой вы хотите начать разделение таблицы. Ячейка, содержащая точку вставки, станет первой строкой второй таблицы.

Далее откройте в «Работа с таблицами» -> «Макет», затем нажмите кнопку «Разделить таблицу».

Таблица теперь разделена на две таблицы.

Как объединить таблицы в ворде

Как и следовало ожидать, также возможно объединить таблицы вместе. Для этого нет кнопки меню. Вы должны сделать это путем перетаскивания.

Поместите указатель мыши на таблицу, к которой вы хотите присоединиться, пока таблица дескрипторов (знак) не появится слева вверху. Вы можете нажать и перетащить таблицу, используя ручку.

Перетащите таблицу в верхний ряд, чтобы выровнять его по нижнему ряду объединяемой таблицы.

Когда вы отпустите кнопку мыши, Word соединит две таблицы.

На этом все. Это руководство было создано с использованием версии Microsoft Word 2016 года.

Excel VBA Import Word table with merged cells to Excel

I have many tables in a Word document (.docx) and I want to import them to a blank Excel sheet in an easy way. The tables in the Word document are not the same size (rows) and some rows have merged cells.

My code is below. I can choose the .docx and then select the number of the table to import but I only can import the headers, so I do not know if works fine. I am doing this because I want to keep the tables format (same rows) and is not valid if I use copy/paste.

When I run this code I get an error:

Run-time error ‘5941’. The requested member of the collection does not exist.

This is the code:

The format of my tables is the following:

Is something like this:

Sorry for the table format but I do not know how to explain it better. The final goal is to leave it in excel as follows:

How can I split the merged cells before insert in Excel? The steps would be to detect one by one as now the cells and when only found 1 split the cell or use as one

Создан 02 дек. 16 2016-12-02 12:51:43 CapAm

please tell more of what is going wrong. The logic seems to be pretty simple, so what is wrong with your output. – Kazimierz Jawor 02 дек. 16 2016-12-02 13:00:25

It is displayed an error: Run-time error ‘5941’. The requested member of the collection does not exist. – CapAm 02 дек. 16 2016-12-02 15:31:28

The error stops the code at this line: Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text). It could be an error for using different columns at the beginning and then. Because the 2 columns rows are exported properly. – CapAm 02 дек. 16 2016-12-02 15:36:08

1 ответ

The error is caused because you cannot iterate through the cells of a table with merged cells by using SomeTable.Rows.Count and SomeTable.Columns.Count as ‘grid references’.

This is because once you have horizontally merged one or more cells in a row, then the column count for that row decreases by n-1 where n is the number of merged cells.

So in your example table the column count is 3 but there is no column 3 in the first row hence the error.

You can use the Next method of the object returned by the Cell method on a Table object to iterate through the cell collection of the table. For each cell you can get the column and row indices and map them to Excel. However, for merged cells, you cannot get a column span property for each cell leaving you to need to look at Width properties to try and infer which cells are merged and by how much. In fact, it is going to be very difficult to recreate a Word table in an Excel worksheet where the table has lots of different cell widths and merging going on.

Here is an example of how to use the Next method:

Читать еще:  Password is required

Which can import this table:

Like so, into a worksheet:

Note there is no unambiguous way AFAIK to solve the challenge around how to know that Bar3 should span merge Excel columns, or that we want Baz3 to be in cell D3 , not C3 .

Работа с таблицами Word с объединенными ячейками

В статьях, посвященных работе с таблицами Word, как правило, авторы избегают тем, касающихся объединенных ячеек. Оно и понятно: любое обращение к ячейке таблицы, находящейся в объединенной области, приводит к возникновению ошибки. Это внутренняя проблема редактора Word, связанная с архитектурой таблицы, и с этим ничего не поделаешь.

Однажды потребовалось перевести в базу данных нормативные данные, оформленные в редакторе Word в виде таблиц. И сразу же возникли проблемы с объединенными ячейками — как заполучить данные, находящиеся в объединенных ячейках.

Но, оказывается, именно возникновение исключений при обращении к отсутствующим ячейкам и позволяет решить эту проблему. Логика простая: раз возникло исключение при обращении к какой-либо ячейке, значит с этой ячейкой не все гладко. Значит, надо этим воспользоваться. На этом принципе основана методика распознавания таблиц Word, представленная в данной статье.

Для начала создаем запись:

и массивный тип

Данный массив будет характеризовать всю таблицу, а элементы массива — каждую ячейку. Что означают поля записи TWordTableCell, можно догадаться по названиям.

В следующем фрагменте показаны переменные, необходимые для работы с таблицей.

Ядром обработки таблицы является следующая процедура:

В этой процедуре выполняется последовательное обращение к ячейкам таблицы и формирование записи FWordTableCell для каждой ячейки, характеризующей считываемую таблицу Word (как ни странно, здесь необходима именно тройная упаковка в try except end). Нужно обратить внимание, что некоторые ячейки приходится разбивать, т.к. для них невозможно определить никаких данных. (К сожалению, при прогонке программы в ручном режиме клавишами F7, F8 или F9, всегда возникает сообщение об ошибке, даже если отключить Tools->Debugger Option->Language Exception

Stop on Delphi Exception). Как видно из кода, инициализируются не все поля записи FWordTableCell. Для определения остальных полей производится обработка данных в процедуре CalcWordTableProp:

Итак, заполнены все поля записи FWordTableCell для всех ячеек. Есть информация о каждой ячейке, которой можно воспользоваться, например, чтобы узнать содержимое любой ячейки.

Для демонстрации работы с массивом FWordTableCell воспользуемся компонентом TMStringGrid — аналогом компонента TStringGrid, но с возможностью объединения ячеек. Можно было бы использовать компонент TStringGrid, т.к. он работает гораздо быстрее TMStringGrid, или любой другой подходящий компонент, но так будет нагляднее.

Для объединения ячеек в таблице TMStringGrid предусмотрены функции с перегрузкой:

где ALeft, ATop, ARight, ABottom — координаты левой верхней и правой нижней объединяемых ячеек таблицы TMStringGrid.

Однако, в массиве FWordTableCell эти координаты отсутствуют, и их нужно вычислить по данным массива FWordTableCell.

Для этой цели введем дополнительные типы (данные типы нужны исключительно для подготовки данных для компонента TMStringGrid):

а также, переменные и процедуры:

Здесь процедура CalcGridProps заполняет массив RowCell коллекции TGridCol для каждой ячейки (также вычисляется действительное число колонок таблицы, т.к. FMaxUsedCols не является таковым):

Процедура WriteToGrid формирует копию таблицы Word в компоненте TMStringGrid:

Для демонстрации работы приведенного выше кода была создана программа DemoWordTable.exe (Рисунок 1).

Нажав кнопку «Открыть таблицу Word», можно открыть документ Word, содержащий таблицу. Программа считывает первую таблицу и создает ее копию в компоненте TMStringGrid (Рисунок 2).

Кроме того, программа позволяет и обратное действие, т.е. создавать произвольную таблицу на форме и переносить ее в документ Word.

Для изменения числа строк и столбцов, а также фиксированных строк и столбцов предусмотрены поля Edit (После изменения значения в поле Edit нужно нажать «Enter», чтобы изменения вступили в силу). Чтобы объединить какие-либо ячейки, нужно сперва их выделить, удерживая клавишу Shift и нажимая клавиши со стрелками. Затем щелкнуть правой кнопкой мыши. Откроется Popup Menu с кнопками «Объединить ячейки» и «Разбить ячейки» (Рисунок 3.). Нажатие кнопки «Объединить ячейки» приведет к объединению ячеек выделенной области. Если выделения нет, т.е. выделена только одна ячейка, то кнопка «Объединить ячейки» открывает редактор ячеек (Рисунок 4). В редакторе можно выбрать нужные ячейки для объединения, ввести текст, который будет находиться в ячейке и выбрать положение текста в ячейке (TO_LEFT, TO_CENTER, TO_RIGHT).

После создания таблицы можно нажать на кнопку «Записать таблицу Word», после чего будет создан новый документ Word, и таблица в нем, которая будет копией созданной таблицы (Рисунок 5).

Напоследок нужно сказать, что есть еще одна уловка при объединении ячеек таблицы Word: если заранее известны все номера ячеек, которые нужно объединить, то объединение нужно начать справа налево, снизу вверх. Тогда объединенные ячейки не спутают индексы ячеек, и все пройдет гладко:

Читать еще:  Как поменять язык в word 2020

Excel VBA импорт таблицы Word с Объединенными ячейками в Excel

У меня есть много таблиц в документе Word (.docx) и я хочу импортировать их в пустой лист Excel простым способом. Таблицы в документе Word имеют разный размер (строки), а некоторые строки имеют объединенные ячейки.

Мой код приведен ниже. Я могу выбрать свое .docx, а затем выберите номер таблицы для импорта, но я могу импортировать только заголовки, поэтому я не знаю, работает ли нормально. Я делаю это, потому что я хочу сохранить формат таблиц (те же строки) и не является допустимым, если я использую copy/paste.

Когда я запускаю этот код, я получаю сообщение об ошибке:

Ошибка времени выполнения ‘5941’. Запрошенный член коллекции не существует.

Формат моих таблиц состоит в следующем:

Это что-то вроде этого:

Извините за формат таблицы, но я не знаю, как объяснить это лучше. Конечная цель состоит в том, чтобы оставить его в excel следующим образом:

Как я могу разделить объединенные ячейки перед вставкой в Excel? Шаги состояли бы в том, чтобы обнаружить один за другим, как сейчас ячейки и когда только найдено 1 разделить ячейку или использовать как один

1 Ответ

Ошибка вызвана тем, что невозможно выполнить итерацию по ячейкам таблицы с Объединенными ячейками, используя SomeTable.Rows.Count и SomeTable.Columns.Count в качестве ‘grid references’.

Это связано с тем, что после горизонтального объединения одной или нескольких ячеек в строке количество столбцов для этой строки уменьшается на n-1, где n-количество объединенных ячеек.

Таким образом, в вашей таблице примеров количество столбцов равно 3, но нет столбца 3 в первой строке, следовательно, ошибка.

Метод Next объекта, возвращаемого методом Cell для объекта Table , можно использовать для итерации по коллекции ячеек таблицы. Для каждой ячейки вы можете получить индексы столбцов и строк и сопоставить их с Excel. Однако для объединенных ячеек вы не можете получить свойство диапазона столбцов для каждой ячейки, поэтому вам нужно посмотреть свойства Width , чтобы попытаться определить, какие ячейки объединены и на сколько. На самом деле, будет очень сложно воссоздать таблицу Word на листе Excel, где таблица имеет много разных Ширин ячеек и происходит слияние.

Вот пример использования метода Next :

Который может импортировать эту таблицу:

Вот так, в рабочий лист:

Обратите внимание, что нет однозначного способа AFAIK решить проблему вокруг того, как узнать , что Bar3 должен охватывать столбцы merge Excel, или что мы хотим, чтобы Baz3 был в ячейке D3 , а не C3 .

Похожие вопросы:

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

У меня есть сотни ячеек, которые мне нужно скопировать вставить из excel в таблицу word. Я выяснил, как вставить данные (т. е. word table cell = 1 ) в excel VBA > word, и это отлично работает, но.

Контекст У меня есть слово с несколькими встроенными таблицами Excel. Эти таблицы Excel различаются по ширине. Я пытаюсь настроить ширину таблицы Excel с помощью кода VBA, чтобы они были.

следующие две строки Dim curTasks As Tasks Set curTasks = Application.Tasks получить список всех текущих задач и работать как шарм в vba-word но не в vba-excel . есть ли способ перенести его в.

Я пытаюсь автоматически обновить определенную информацию (например, имена, даты и цифры) в 3 различных документах Word, поместив данные в электронную таблицу и связав их с соответствующими ячейками.

Как редактировать таблицы excel из word с помощью VBA?

У меня есть файл Excel нормальных ячеек вместе с Объединенными ячейками и задачей хранить каждую строку в файле Excel в базе данных MySQL. Я могу получить данные каждой ячейки из файла Excel и.

У меня возникли проблемы с экспортом объединенной таблицы слов в excel. Вот мой текущий код для таблицы, которая не объединена. Sub ImportWordTable() Dim wdDoc As Object Dim wdFileName As Variant.

Я довольно новичок в VBA и пытаюсь заполнить уже существующий документ excel на основе документов Word. Документы Word будут иметь три таблицы, а некоторые ячейки станут столбцами Excel. Идея.

У меня есть функция Word VBA, которую я пытаюсь построить в Excel VBA (причина этого выбора исходит из этого вопроса ), и я застрял в следующей проблеме: Функция Word VBA широко использует.

Ссылка на основную публикацию
Adblock
detector