just a quick question.
I’ve got this table in a Word template which have two columns by default.
Then I’ve got this button the user can press if he wants another column. The macro run inserts several text placeholders and formats certain things automatically.
But what I want is some sort of routine which basically checks the number of columns in this table, and if there are two columns, the text typed in is automatically «Column 3» and if there are three columns there, the text should be «Column 4». Should be pretty simple if I can just find out how I can find the number of columns.
abatishchev
97.3k85 gold badges297 silver badges432 bronze badges
asked Aug 1, 2010 at 14:49
Kenny BonesKenny Bones
4,99936 gold badges109 silver badges173 bronze badges
A table object knows how many columns it has, just check the Columns.Count property.
ThisDocument.Tables(1).Columns.Count
answered Aug 1, 2010 at 15:18
2
This works:
Sub CountColumns()
Dim d As Document
Set d = ActiveDocument
Dim t As Table
Set t = d.Tables(1)
Debug.Print t.Columns.Count
End Sub
answered Aug 1, 2010 at 15:17
Todd MainTodd Main
28.9k11 gold badges82 silver badges146 bronze badges
0 / 0 / 0 Регистрация: 02.02.2010 Сообщений: 12 |
|
1 |
|
Word 04.02.2010, 15:08. Показов 5733. Ответов 4
Таблица создавалась на 6 столбцов, но в некоторых строках столбцы объядинялись. Так вот, надо найти именно те строки, которые имеют по 6 столбцов. Благодарю за внимание.
0 |
0 / 0 / 0 Регистрация: 02.02.2010 Сообщений: 12 |
|
04.02.2010, 15:51 [ТС] |
2 |
Уже догнал сам WordBasic.TableSelectRow
0 |
Schumacher57 12 / 11 / 3 Регистрация: 07.09.2015 Сообщений: 256 |
||||||||
28.01.2022, 13:36 |
3 |
|||||||
А вот ведь жишь, то засада, то какая!
И что получается? Если есть объединённые ячейки в таблице, то узнать количество столбцов в определённой строке, я могу только через свойство Что по человечески узнать не как? По человечески это типа:
0 |
Narimanych 2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,141 |
||||
28.01.2022, 14:20 |
4 |
|||
B-boy Dimo-N,
так вот, надо найти именно те строки, которые имеют по 6 столбцов. Schumacher57,
0 |
Schumacher57 12 / 11 / 3 Регистрация: 07.09.2015 Сообщений: 256 |
||||
28.01.2022, 14:45 |
5 |
|||
Narimanych,
С Вашего позволения Не не, тут надо внимательно читать:
Если есть объединённые ячейки в таблице, то узнать . . . Если воспользоваться вашим примером, то на строчке:
Вылетит ошибка: ‘5991’ Пробовал, уже конечно, такой подход
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
28.01.2022, 14:45 |
Помогаю со студенческими работами здесь Из таблицы Exel выбирает все строки с нечетным номерами и вставляет эти данные в Word в четные строки таблицы Работа с двумерными массивами ( Определить: количество столбцов, номер строки) Как определить номер таблицы в word? Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD Определить количество классов эквивалентных строк данной прямоугольной матрицы. Строки считать эквивалентными, если равны суммы их элементов. Определить количество столбцов с нулевыми элементами и номер строки с самой длинной серией одинаковых элементов Создание таблицы: как в DataGridView задать программно количество строк и столбцов Разработка программного средства для работы с таблицами. При… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 5 |
Создание таблиц в документе Word из кода VBA Excel. Метод Tables.Add, его синтаксис и параметры. Объекты Table, Column, Row, Cell. Границы таблиц и стили.
Работа с Word из кода VBA Excel
Часть 4. Создание таблиц в документе Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Таблицы в VBA Word принадлежат коллекции Tables, которая предусмотрена для объектов Document, Selection и Range. Новая таблица создается с помощью метода Tables.Add.
Синтаксис метода Tables.Add
Expression.Add (Range, Rows, Columns, DefaultTableBehavior, AutoFitBehavior) |
Expression – выражение, возвращающее коллекцию Tables.
Параметры метода Tables.Add
- Range – диапазон, в котором будет создана таблица (обязательный параметр).
- Rows – количество строк в создаваемой таблице (обязательный параметр).
- Columns – количество столбцов в создаваемой таблице (обязательный параметр).
- DefaultTableBehavior – включает и отключает автоподбор ширины ячеек в соответствии с их содержимым (необязательный параметр).
- AutoFitBehavior – определяет правила автоподбора размера таблицы в документе Word (необязательный параметр).
Создание таблицы в документе
Создание таблицы из 3 строк и 4 столбцов в документе myDocument без содержимого и присвоение ссылки на нее переменной myTable:
With myDocument Set myTable = .Tables.Add(.Range(Start:=0, End:=0), 3, 4) End With |
Создание таблицы из 5 строк и 4 столбцов в документе Word с содержимым:
With myDocument myInt = .Range.Characters.Count — 1 Set myTable = .Tables.Add(.Range(Start:=myInt, End:=myInt), 5, 4) End With |
Для указания точки вставки таблицы присваиваем числовой переменной количество символов в документе минус один. Вычитаем единицу, чтобы исключить из подсчета последний знак завершения абзаца (¶), так как точка вставки не может располагаться за ним.
Последний знак завершения абзаца всегда присутствует в документе Word, в том числе и в новом без содержимого, поэтому такой код подойдет и для пустого документа.
При создании, каждой новой таблице в документе присваивается индекс, по которому к ней можно обращаться:
myDocument.Tables(индекс) |
Нумерация индексов начинается с единицы.
Отображение границ таблицы
Новая таблица в документе Word из кода VBA Excel создается без границ. Отобразить их можно несколькими способами:
Вариант 1
Присвоение таблице стиля, отображающего все границы:
myTable.Style = «Сетка таблицы» |
Вариант 2
Отображение внешних и внутренних границ в таблице:
With myTable .Borders.OutsideLineStyle = wdLineStyleSingle .Borders.InsideLineStyle = wdLineStyleSingle End With |
Вариант 3
Отображение всех границ в таблице по отдельности:
With myTable .Borders(wdBorderHorizontal) = True .Borders(wdBorderVertical) = True .Borders(wdBorderTop) = True .Borders(wdBorderLeft) = True .Borders(wdBorderRight) = True .Borders(wdBorderBottom) = True End With |
Присвоение таблицам стилей
Вариант 1
myTable.Style = «Таблица простая 5» |
Чтобы узнать название нужного стиля, в списке стилей конструктора таблиц наведите на него указатель мыши. Название отобразится в подсказке. Кроме того, можно записать макрос с присвоением таблице стиля и взять название из него.
Вариант 2
myTable.AutoFormat wdTableFormatClassic1 |
Выбирайте нужную константу с помощью листа подсказок свойств и методов – Auto List Members.
Обращение к ячейкам таблицы
Обращение к ячейкам второй таблицы myTable2 в документе myDocument по индексам строк и столбцов:
myTable2.Cell(nRow, nColumn) myDocument.Tables(2).Cell(nRow, nColumn) |
- nRow – номер строки;
- nColumn – номер столбца.
Обращение к ячейкам таблицы myTable в документе Word с помощью свойства Cell объектов Row и Column и запись в них текста:
myTable.Rows(2).Cells(2).Range = _ «Содержимое ячейки во 2 строке 2 столбца» myTable.Columns(3).Cells(1).Range = _ «Содержимое ячейки в 1 строке 3 столбца» |
В таблице myTable должно быть как минимум 2 строки и 3 столбца.
Примеры создания таблиц Word
Пример 1
Создание таблицы в новом документе Word со сплошными наружными границами и пунктирными внутри:
Sub Primer1() Dim myWord As New Word.Application, _ myDocument As Word.Document, myTable As Word.Table Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument Set myTable = .Tables.Add(.Range(0, 0), 5, 4) End With With myTable .Borders.OutsideLineStyle = wdLineStyleSingle .Borders.InsideLineStyle = wdLineStyleDot End With End Sub |
В выражении myDocument.Range(Start:=0, End:=0)
ключевые слова Start и End можно не указывать – myDocument.Range(0, 0)
.
Пример 2
Создание таблицы под ранее вставленным заголовком, заполнение ячеек таблицы и применение автосуммы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
Sub Primer2() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document, _ myTable As Word.Table, myInt As Integer Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument ‘Вставляем заголовок таблицы .Range.InsertAfter «Продажи фруктов в 2019 году» & vbCr myInt = .Range.Characters.Count — 1 ‘Присваиваем заголовку стиль .Range(0, myInt).Style = «Заголовок 1» ‘Создаем таблицу Set myTable = .Tables.Add(.Range(myInt, myInt), 4, 4) End With With myTable ‘Отображаем сетку таблицы .Borders.OutsideLineStyle = wdLineStyleSingle .Borders.InsideLineStyle = wdLineStyleSingle ‘Форматируем первую и четвертую строки .Rows(1).Range.Bold = True .Rows(4).Range.Bold = True ‘Заполняем первый столбец .Columns(1).Cells(1).Range = «Наименование» .Columns(1).Cells(2).Range = «1 квартал» .Columns(1).Cells(3).Range = «2 квартал» .Columns(1).Cells(4).Range = «Итого» ‘Заполняем второй столбец .Columns(2).Cells(1).Range = «Бананы» .Columns(2).Cells(2).Range = «550» .Columns(2).Cells(3).Range = «490» .Columns(2).Cells(4).AutoSum ‘Заполняем третий столбец .Columns(3).Cells(1).Range = «Лимоны» .Columns(3).Cells(2).Range = «280» .Columns(3).Cells(3).Range = «310» .Columns(3).Cells(4).AutoSum ‘Заполняем четвертый столбец .Columns(4).Cells(1).Range = «Яблоки» .Columns(4).Cells(2).Range = «630» .Columns(4).Cells(3).Range = «620» .Columns(4).Cells(4).AutoSum End With ‘Освобождаем переменные Set myDocument = Nothing Set myWord = Nothing ‘Завершаем процедуру Exit Sub ‘Обработка ошибок Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Метод AutoSum суммирует значения в ячейках одного столбца над ячейкой с суммой. При использовании его для сложения значений ячеек в одной строке, результат может быть непредсказуемым.
Чтобы просуммировать значения в строке слева от ячейки с суммой, используйте метод Formula объекта Cell:
myTable.Cell(2, 4).Formula («=SUM(LEFT)») |
Другие значения метода Formula, применяемые для суммирования значений ячеек:
- «=SUM(ABOVE)» – сумма значений над ячейкой (аналог метода AutoSum);
- «=SUM(BELOW)» – сумма значений под ячейкой;
- «=SUM(RIGHT)» – сумма значений справа от ячейки.
Форум программистов Vingrad
Модераторы: MetalFan |
Поиск: |
|
Количество столбцов в строке в таблице Word |
Опции темы |
koanni |
|
||
Новичок Профиль Репутация: нет
|
Есть таблица в ворде нужно узнать сколько столбцов на текущей строке, так как в таблице количество столбцов в некоторых строках разные, есть объеденные ячейки. |
||
|
|||
Albinos_x |
|
||
Evil Skynet Профиль
Репутация: 15
|
думаю, что количество столбцов одинаково для всеё таблицы, нудно проверять ячейки на объединение ——————— «Кто владеет информацией, тот владеет миром» |
||
|
|||
koanni |
|
||
Новичок Профиль Репутация: нет
|
Albinos_x, Здравствуйте, мой начальник программирует исключительно на VB (Visual Basic), пример кода на VB выглядит вот так: и результат всего этого количество столбцов как мне это перенести на Delphi? |
||
|
|||
Albinos_x |
|
||
Evil Skynet Профиль
Репутация: 15
|
или WordApplication1.ActiveDocument.Tables.Item(1).Rows.Item(3).Cells.Count; или WordDocument1.Tables.Item(1).Rows.Item(3).Cells.Count; или Tbl.Rows.Item(3).Cells.Count; в зависимости от того, какой используете подход ——————— «Кто владеет информацией, тот владеет миром» |
||
|
|||
koanni |
|
||
Новичок Профиль Репутация: нет
|
Albinos_x Спасибо большое, все получилось |
||
|
|||
|
Правила форума «Delphi: ActiveX/СОМ/CORBA» | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
Вопрос:
просто быстрый вопрос.
У меня есть эта таблица в шаблоне Word, который по умолчанию имеет два столбца.
Тогда у меня есть эта кнопка, которую пользователь может нажать, если ему нужен другой столбец. Макросъемка вставляет несколько текстовых заполнителей и автоматически форматирует определенные вещи.
Но то, что я хочу, это какая-то рутина, которая в основном проверяет количество столбцов в этой таблице, а если есть два столбца, введенный текст автоматически “Столбец 3”, и если там три столбца, текст должен быть “Столбец 4”. Должно быть довольно просто, если я могу просто узнать, как я могу найти количество столбцов.
Лучший ответ:
Объект таблицы знает, сколько столбцов он имеет, просто проверьте свойство Columns.Count.
ThisDocument.Tables(1).Columns.Count
Ответ №1
Это работает:
Sub CountColumns()
Dim d As Document
Set d = ActiveDocument
Dim t As Table
Set t = d.Tables(1)
Debug.Print t.Columns.Count
End Sub