Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2013, 22:06   #11
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

nerv, вот такой код быстро сработал - около минуты, таблица на 100 страниц.
Для работы кода нужно подключить библиотеку в Tools - References:
Microsoft XML версия.
Код:
Sub Procedure_1()

    'Создаём объект "MSXML2.DOMDocument".
    'Даём объетку "MSXML2.DOMDocument" VBA-имя "myXMLDocument".
    'Через имя "myXMLDocument" будем обращаться к объекту "MSXML2.DOMDocument".
    Dim myXMLDocument As New MSXML2.DOMDocument
    Dim myCell As MSXML2.IXMLDOMElement
    Dim myTable As Word.Table
    Dim myTimer As Double
    
    '1. Запоминаем время начало работы кода.
    myTimer = Timer
    
    '2. Даём таблице VBA-имя "myTable".
    Set myTable = ActiveDocument.Tables(1)
    
    '3. Я так понимаю, что формируем XML-документ.
    myXMLDocument.LoadXML (myTable.Range.XML)
    
    '4. Просматриваем все XML-теги "w:tcW".
    '"w:tcW" означает "ширина ячейки":
        '"w" - буква означает, что тег относится к программе "Word" (я так думаю);
        'tcW - table cell width.
    For Each myCell In myXMLDocument.DocumentElement.getElementsByTagName("w:tcW")
        
        '5. Устанавливаем ширину ячейки.
        'В XML-Word используется две единицы измерения: твипсы и проценты.
        'Я задаю в твипсах.
        myCell.Attributes.Item(0).NodeValue = 2900
        
    Next
    
    '6. Удаляем таблицу, чтобы вместо неё вставить изменённую таблицу.
    myTable.Delete
    
    '7. Вставляем содержимое XML-объекта.
    ActiveDocument.Range.InsertXML (myXMLDocument.XML)
    
    '8. Выводим в View - Immediate Window сколько секунд работал код.
    Debug.Print Timer - myTimer
    
End Sub
Код, тыкая написал, надо ещё разбираться что к чему. А так, по идее, если будет быстро работать, то удобнее, чем напрямую вносить изменения в XML-файл, т.к. не надо производить подсчётов размеров таблицы.

Последний раз редактировалось Скрипт; 15.02.2013 в 22:12.
Скрипт вне форума Ответить с цитированием
Старый 16.02.2013, 01:13   #12
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
вот такой код быстро сработал
поздравляю

Цитата:
Для работы кода нужно подключить библиотеку в Tools - References:
я в курсе. Не люблю ничего подключать, поэтому использую позднее связывание.

зачем ты пишешь везде му? Это же не Герасим с Му-му. От этого код только хуже читается. Убери их -
Код:
Dim myXMLDocument As New MSXML2.DOMDocument
Dim myCell As MSXML2.IXMLDOMElement
Dim myTable As Word.Table
Dim myTimer As Double
в результате получится локальная переменная Timer, которая переопределит глобальную функцию на уровне процедуры. Достучаться до нее можно так:
Код:
Dim Timer As Double

Timer = VBA.Timer
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 16.02.2013, 07:53   #13
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

nerv, я добавляю префикс "my", чтобы название переменной не совпало с зарезервированным словом. Мне самому неудобно читать переменные, когда у них префиксы. Но думаю, что к этому можно привыкнуть и через некоторое время префикс не будет мешать.


Примечание

Префиксы по-другому ещё называются приставками.

Последний раз редактировалось Скрипт; 16.02.2013 в 07:58.
Скрипт вне форума Ответить с цитированием
Старый 16.02.2013, 12:12   #14
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Но думаю, что к этому можно привыкнуть
а я думаю, что их не надо добавлять. Тем более такие бессмысленные.

Если ты напишешь так, как я сказал выше, твой код будет работать.

Цитата:
чтобы название переменной не совпало с зарезервированным словом
сперва стоит определиться, что такое зарезервированные слова
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 16.02.2013, 12:15   #15
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

nerv, это же не единственный мой код. В других случаях имя переменной может совпасть с зарезервированным словом. Зачем думать о том, совпадёт имя переменной с зарезервированным словом или нет, когда проще всегда добавлять префикс.

Последний раз редактировалось Скрипт; 16.02.2013 в 19:14.
Скрипт вне форума Ответить с цитированием
Старый 17.02.2013, 00:03   #16
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Зачем думать о том, совпадёт имя переменной с зарезервированным словом или нет
если имя переменной совпадает с зарезервированным словом, строка подсвечивается красным. кэп.
Код:
Dim var

Dim end

Dim cell

Dim do
Твои префиксы избыточны и бессмысленны (из примера выше), но мне все равно, как ты будешь писать
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 18.02.2013, 16:41   #17
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

nerv, протестировал код, написанный с использованием XML, на таблице в 100 страниц, сработал за несколько минут. Получается, что нужно работать с Word-таблицами через XML.
Скрипт вне форума Ответить с цитированием
Старый 20.02.2013, 22:21   #18
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от Скрипт Посмотреть сообщение
...вот такой код быстро сработал - около минуты, таблица на 100 страниц.
Если необходим анализ таких больших таблиц, не лучше хранить их в Excel или Access, а при необходимости печати вставлять в Word?
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.02.2013, 08:21   #19
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Skif-F, в данном случае человек не может выбирать и влиять на вид доументов. Человеку дают документ и человек должен отформатировать документ.
Скрипт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с xml через MSXML6 KraT_by Помощь студентам 0 30.10.2012 14:35
Работа с документом ворд через дельфи Toni Milano Помощь студентам 1 16.12.2010 11:29
Связь ячейки Exel с документом Word MEXAHNK Microsoft Office Word 1 24.11.2010 10:51
Работа с документом Word из Delphi kate4ka Общие вопросы Delphi 2 18.02.2008 12:12