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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2013, 13:29   #1
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 906
По умолчанию Работа с Word-документом через XML

Как работать с Word-документом, не открывая окна программы "Word", с помощью VBA?
Ведь Word-документ может быть содержится как какой-то текст.

Справочники на русском языке есть с такими примерами?
Скрипт вне форума Ответить с цитированием
Старый 15.02.2013, 16:36   #2
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Есть только описание формата файла docx и .NET-библиотеки для работы с ним. Сомневаюсь, что их можно к VBA прикрутить.
cw_o вне форума Ответить с цитированием
Старый 15.02.2013, 16:41   #3
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 906
По умолчанию

cw_o, нужно получить XML-файл из Word-документа.

XML-файлы - это просто текстовые файлы, содержащие какой-то текст. Вот работать можно с этим текстом. Это, по идее, должно быть очень быстро.

В Word 2003 не было XML-формата. Но можно открыть документ Word 2003 в Word 2007 и пересохранить в Word 2007. Автоматически будет создан XML-документ.

Но работать с XML-документом не то же самое, что работать с Word-документом, т.к. программа Word контролирует каждое действие человека, а при внесении изменений в XML-документ, никто контролировать не будет. И если не то число записать (если забыл что-то учесть), то Word-документ не откроется.


Примечание

В программе "Word" встречается ещё в некоторых случаях понятие "XML", но в тех случаях совсем другой смысл. В тех случаях имеется ввиду создание XML-тегов в самом Word-документе, что не имеет ничего общего с тем, что Word-документ сам представляет собой XML-документ.

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

Код:
Sub io()
    Dim XMLDocument As Object
    Dim Table As Table
    Dim Cell As Object
    
    Set XMLDocument = CreateObject("MSXML.DOMDocument")
    Set Table = ThisDocument.Tables(1)
    
    XMLDocument.LoadXML (Table.Range.XML)
    
    For Each Cell In XMLDocument.DocumentElement.getElementsByTagName("w:t")
        Cell.Text = Cell.Text & "_modified"
    Next
    
    Table.Delete
    
    ThisDocument.Range.InsertXML (XMLDocument.XML)
End Sub
Вложения
Тип файла: zip example.zip (17.3 Кб, 28 просмотров)
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 15.02.2013, 18:39   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

Скрипт скажите, что практически даёт решение Вашего вопроса
Ципихович Эндрю вне форума Ответить с цитированием
Старый 15.02.2013, 19:01   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 906
По умолчанию

Ципихович Эндрю, VBA-Word средства в некоторых случаях медленно работают с большими таблицами.

Ищу альтернативные способы быстрой работы с Word-документами.
Скрипт вне форума Ответить с цитированием
Старый 15.02.2013, 19:16   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

понятно......
Ципихович Эндрю вне форума Ответить с цитированием
Старый 15.02.2013, 19:17   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
Скрипт скажите, что практически даёт решение Вашего вопроса
ни-че-го

Скрипт, я тебе показал пример работы с xml. Лучше стало?

Цитата:
Сообщение от Скрипт Посмотреть сообщение
Ципихович Эндрю, VBA-Word средства в некоторых случаях медленно работают с большими таблицами.

Ищу альтернативные способы быстрой работы с Word-документами.
вот мы и подошли к ассемблеру
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 15.02.2013, 20:41   #9
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 906
По умолчанию

nerv, я ещё не тестировал ваш код. Я никогда не работал с XML, поэтому я не могу сходу взять и начать писать коды на XML.

nerv, смысл в чём? Я пока читал сегодня про XML, понял, как работает таблица в программе Word: при каждом изменении ширины ячейки происходит просмотр всей таблицы. Таблица пересматривается для того, чтобы определить, сколько стало столбцов в таблице. Если взять XML-файл с таблицей Word, то перед таблицей будет XML-код, в котором указана ширина столбцов. Думаю, что это одна из причин, почему работа с таблицами в Word такая медленная.

Есть обход этой проблемы: не вести пересчёт при каждом изменении, т.к. мы будем знать, что у нас за таблица и будем знать, что нам ничего пересчитывать не надо. Мы просто возьмём и занесём данные в текстовый файл с расширением "XML".

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

Цитата:
Сообщение от Скрипт Посмотреть сообщение
Я пока читал сегодня про XML, понял, как работает таблица в программе Word
логические рассуждения/умозаключения - это хорошо, что в данном случае не стоит строить догадки, лучше читать доку.

Цитата:
Сообщение от Скрипт Посмотреть сообщение
при каждом изменении ширины ячейки происходит просмотр всей таблицы. Таблица пересматривается для того, чтобы определить, сколько стало столбцов в таблице. Если взять XML-файл с таблицей Word, то перед таблицей будет XML-код, в котором указана ширина столбцов. Думаю, что это одна из причин, почему работа с таблицами в Word такая медленная.

Есть обход этой проблемы: не вести пересчёт при каждом изменении, т.к. мы будем знать, что у нас за таблица и будем знать, что нам ничего пересчитывать не надо.
к слову, здесь (в твоей теме) я приводил пример, который (по идее) должен этому препятствовать. Только толку 0. + там еще один вариант "пакетного" изменения размеров, на мой взгляд достаточно гибкий.
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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