Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Office Word
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
LSI
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 2
1

Вставка колонок в таблицу

25.02.2013, 09:52. Просмотров 2530. Ответов 3
Метки нет (Все метки)

Есть очень простая таблица в прикреплённом файле.
В ней первая строка содержит три ячейки, вторая - 4, третья 6.

Я хочу добавить столбец вконец таблицы: выделяю одну из ячеек в последнем столбце и выполняю "Вставить столбцы справа". При этом записываю макрос. Результат работы таблица 2. Всё добавилось как и хотелось.

Записанный макрос
Visual Basic
1
2
3
4
5
6
7
Sub Test()
'
' Tesе
' Insert columns right
'
    Selection.InsertColumnsRight
End Sub
Удаляю добавленный столбец. И теперь хочу сделать тоже самое но с помощью макроса. Встаю в одну из ячеек последнего столбца и выполняю макрос. Результат таблица 3. Видно что результаты абсолютно разные. Ячейки добавляются не в конец строк а после 3 ячейки в каждой строке.

Выгружаю данные из VS 2008. Таже проблема. Испробовал уже всё что мог (InsertColumns, добавление из разных строк). Может кто сталкивался с такой проблемой?
0
Вложения
Тип файла: docx Пример.docx (15.4 Кб, 20 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2013, 09:52
Ответы с готовыми решениями:

Вставка таблицы в таблицу
Всем привет, устал уже искать, решил спросить тут. (в прикрепленных файлах постараюсь все...

Автогенерация DataGrid + ручная вставка, как управлять порядком следования колонок
Есть DataGrid AutoGenerateColumns="True" привязанный к коллекции порядок следования задан через...

Добавление колонок в таблицу БД
Имеется c++ builder 6 и таблица paradox 7. Нужно удалять и добавлять столбцы у таблицы. В таблице...

Вывод в таблицу по семь колонок
$query_proizv = mysql_query("select * from prigroup"); echo '<h2...

Объединение названия колонок с их значением в одну таблицу
Здравствуйте. Возникла проблема с правильным составлением запроса к БД. Есть таблица Points, где...

3
ViterAlex
6925 / 3868 / 1571
Регистрация: 11.02.2013
Сообщений: 8,440
Завершенные тесты: 3
25.02.2013, 10:28 2
Дело в объединённых ячейках. Макрорекордер записывает команду меню, а вот столбец добавляется уже кодом самого ворда, отличным от того, который выполняется при запуске макроса. Так вот, этот внутренний код ворда учитывает количество ячеек в строке и понимает, что вставить справа, означает справа от последней выделенной ячейки в строке. Макрос же вставляет ячейки справа от третьей ячейки в строке, потому что в первой строке таблицы три столбца. Проверяется просто: выдели последний столбец и последовательно посмотри номер столбца выбранных ячеек:
Код
?selection.cells(3).ColumnIndex
 6 
?selection.cells(2).ColumnIndex
 4 
?selection.cells(1).ColumnIndex
 3
Выход: добавлять по ячейке к каждой строке
Visual Basic
1
2
3
4
    Dim oRow As Row
    For Each oRow In Selection.Tables(1).Rows
        oRow.Cells(oRow.Cells.Count).Range.Cells.Add
    Next
Но это если нет ячеек, объединённых по строкам
1
LSI
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 2
25.02.2013, 10:36 3
Спасибо! Рассматривал я такой вариант, смущало что при вставке ячейки возможно будут разной ширины и всё в итоге съедет. Сейчас попробовал через макрос вроде всё ок. Осталось из студии, правда там таблица огого да и колонок тоже не мало
0
Скрипт
5448 / 1129 / 49
Регистрация: 15.09.2012
Сообщений: 3,423
25.02.2013, 23:29 4
lsi, VBA-Word-средства медленно работают в некоторых случаях, например, при работе с большими таблицами. В этом случае можно попробовать использовать "XML".
Есть библиотека: Microsoft XML, v6.0


Пример, как можно вставить столбец в таблицу с помощью библиотеки "Microsoft XML, версия".

Код работает при следующих условиях:
  1. в Word-документе ничего нет, кроме одной таблицы;
  2. таблица состоит из одной строки и одного столбца;
  3. после таблицы два пустых абзаца;
  4. для работы кода нужно подключить библиотеку: Tools - References... - Microsoft XML, версия
Кликните здесь для просмотра всего текста
Visual Basic
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
61
62
63
64
65
66
67
68
69
70
71
72
73
Sub Procedure_1()
    
    Const myNamespaceURI As String = "http://schemas.microsoft.com/office/word/2003/wordml"
    
    'Нужно подключить библиотеку: Tools - References.. - Microsoft XML версия.
    Dim myXMLDocument As New MSXML2.DOMDocument
    Dim myXMLTables As MSXML2.IXMLDOMSelection
    Dim myXMLRows As MSXML2.IXMLDOMSelection
    Dim myXMLTable As MSXML2.IXMLDOMElement
    Dim myRow As MSXML2.IXMLDOMElement
    Dim myCell As MSXML2.IXMLDOMNode
    Dim myCellProperty As MSXML2.IXMLDOMNode
    Dim myCellWidth As MSXML2.IXMLDOMNode
    Dim myParagraph As MSXML2.IXMLDOMNode
    
    Dim myTable As Word.Table
    Dim myRange As Word.Range
    
    '1. Даю Word-таблице VBA-имя "myTable".
    Set myTable = ActiveDocument.Tables(1)
    
    '2. Делаем настройки объекта "myXMLDocument".
    '"async" используется, чтобы код продолжил работу
        'только после того, как данные поступят в объект "myXMLDocument".
    myXMLDocument.async = False
    
    '3. Помещаю данные из Word-документа в XML-объект.
    myXMLDocument.LoadXML myTable.Range.XML
    
    '4. Получаем коллекцию всех таблиц, которые мы взяли в объект "myXMLDocument".
    Set myXMLTables = myXMLDocument.getElementsByTagName("w:tbl")
    
    '5. Получаем доступ к первой таблице (порядковый номер первой таблицы ноль).
    Set myXMLTable = myXMLTables.Item(0)
    
    '6. Получаем коллекцию всех строк в таблице.
    Set myXMLRows = myXMLTable.getElementsByTagName("w:tr")
    
    '7. Получаем доступ к первой строке.
    Set myRow = myXMLRows.Item(0)
    
'-------------------------------------------------------------------------------------------------
    '8. Создаём в оперативной памяти компьютера ячейку таблицы.
    
    '8.1. Создаём в оперативной памяти компьютера ячейку таблицы.
    Set myCell = myXMLDocument.createNode(Type:=NODE_ELEMENT, _
        Name:="w:tc", NamespaceURI:=myNamespaceURI)
 
    '8.2. Формируем в оперативной памяти компьютера XML-теги "w:tcPr" и "w:tcW".
    Set myCellProperty = myXMLDocument.createNode(Type:=NODE_ELEMENT, _
        Name:="w:tcPr", NamespaceURI:=myNamespaceURI)
    Set myCellWidth = myXMLDocument.createNode(Type:=NODE_ELEMENT, _
        Name:="w:tcW", NamespaceURI:=myNamespaceURI)
    myCellProperty.appendChild newChild:=myCellWidth
    
    Set myParagraph = myXMLDocument.createNode(Type:=NODE_ELEMENT, _
        Name:="w:p", NamespaceURI:=myNamespaceURI)
 
    '8.3. Присваиваемые XML-теги "w:tcPr" и "w:tcW" ячейке.
    myCell.appendChild newChild:=myCellProperty
    myCell.appendChild newChild:=myParagraph
    
    
'-------------------------------------------------------------------------------------------------
    '9. Вставляем созданную ячейку в таблицу.
    myRow.appendChild newChild:=myCell
 
    '10. Вставка изменённой таблицы в конце документа.
     Set myRange = _
        ActiveDocument.Range(Start:=ActiveDocument.Range.End - 1, End:=ActiveDocument.Range.End - 1)
     myRange.InsertXML myXMLDocument.XML
 
End Sub
1
25.02.2013, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 23:29

Как добавить в новую таблицу полученные массивы колонок?
Добрый день! Помогите, не могу найти решение. Опишу проблему: Приложение считывает из файла Excel...

Немогу создать таблицу в MySQL с русским назаванием колонок
<?php $connect = mysql_connect('localhost', 'frank', 'delgado') or die(mysql_error()); $sozdBD...

SQLite - Автоматическое суммирование содержимого колонок разных таблиц в итоговую таблицу
Помогите пожалуйста, стоит задача: Есть несколько предприятий(допустим 3 и для каждого из них есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru