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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 09:02   #1
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию Нужна информация об ole word

Всем привет
Не могу понять объектную модель word в такой степени, чтобы мои приложения могли нужным мне образом взаимодействовали с word. Где бы можно было узнать про обмен данными с word и другими приложениями.
Я для этой цели использую vb6 и подключаю библиотеку microsoft word 12, мне и хотелось бы изучить эту библиотеку. Но самое главное понять, как сделать обмен данными.
Я уже прочитал эту статью http://citforum.ru/programming/vb/vba_word/2.shtml здесь на мой взгляд там только краткий обзор функций в алфавитном или шахматном порядке.

Может про vba посмотреть и может он использует теже объекты, которые в этой библиотеке?

Или подскажите, информацию по этой теме
wanes101 вне форума Ответить с цитированием
Старый 03.05.2013, 09:44   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

wanes101, библиотека "Microsoft Word версия Object Library" - это библиотека, которая используется в VBA-Word. С программой "Word" продаётся справка по VBA-Word. В этой справке можно смотреть информацию по объектной модели программы "Word".


Некоторые советы:
  1. сначала напишите работающий код в VBA-Word. Затем полученный код уже адаптируйте для работы с другой программой. Иначе вы будете делать какие-нибудь глупые ошибки и удивляться - почему так;
  2. в VBA-Word есть константы. Эти константы имеют префикс "wd". Если вы в своей программе не будете подключать библиотеку "Microsoft Word версия Object Library", то константы нужно заменить числами, которые эти константы содержат. Числа можно посмотреть в VBA так (см. вложение):
    1. View - Object Browser;
    2. во второе поле сверху (справа есть кнопка с биноклем) вставьте имя константы, у которой нужно узнать число;
    3. нажмите кнопку с биноклем;
    4. внизу отобразится результат;
    5. в самом низу будет число, которое содержится в константе. В скобках число записано в шестнадцатеричной системе исчисления. Вам это число не нужно. Например, для константы "wdAlertsAll" вам в свою программу нужно будет взять число "-1";
  3. если в VBA-справке что-то не нашли, то попробуйте найти в интернете, т.к. ответы на простые вопросы по VBA-Word уже давно есть в интернете. Если ответа не найдёте, то создайте тему на Форуме;
  4. вообще написание VBA-кода для какой-либо программы из пакета "MS Office" должно начинаться с макрорекордера. С помощью макрорекордера вы узнаете, какие вам понадобятся объекты. Без макрорекордера найти в VBA-справке нужный объект будет сложно, т.к. объектов очень много и справка на английском языке, а кнопки в программе "Word" на русском языке.
Вложения
Тип файла: zip Рисунок_1.zip (59.1 Кб, 9 просмотров)

Последний раз редактировалось Скрипт; 03.05.2013 в 10:06.
Скрипт вне форума Ответить с цитированием
Старый 03.05.2013, 10:00   #3
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

Значит мои предположения верны. Спасибо
wanes101 вне форума Ответить с цитированием
Старый 06.05.2013, 11:23   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если вам нужно просто создать/прочитать файл и не нужна поддержка старых версий офиса (т.е. только начиная с 2007, которые xlsx, docx и т.д. форматы), то там XML и можно обойтись без всех этих объектов. Для C# например есть удобные обертки для работы с ним типа ClosedXML.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 06.05.2013, 11:37   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Alex11223, работать с Word-документом как с XML-документом - это не то же самое, что работать с Word-документом, как с VBA-Word-документом.

Во-первых, нигде нет справки и информации, как работать с Word-документом как с XML-документом, а про VBA-Word-объекты полно информации. Та справка, что есть про работу с Word-документами как с XML-документами, - её можно и не считать справкой.

Во-вторых, работа с Word-документом как c XML-документом сложнее, т.к. расчёты нужно проводить самому программисту, а если использовать VBA-Word-объекты, то расчёты все уже произвели программисты из "Microsoft" и остаётся только собирать код как детский конструктор из кубиков.
Например, попробуйте удалить в Word-таблице строку с помощью XML-средств. Чтобы это сделать, нужно обучаться, наверное, несколько месяцев, а чтобы удалить строку из Word-таблицы с помощью VBA-Word-средств, можно через "Гугл" найти информацию.

Вывод

То, что вы предлагаете, - это из области фантастики.
Скрипт вне форума Ответить с цитированием
Старый 06.05.2013, 12:16   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы не путаете документы ворд формата doc с docx? Я про docx.

Для docx как раз таки проще использовать xml (точнее уже готовые обертки использующие MS Office Open XML SDK), чем объекты.

Например для C# я пользовался этой библиотекой: http://closedxml.codeplex.com/ (не знаю все ли операции поддерживаются, когда использовал ее для работы с Excel документами, то было все связанное с чтением, записью, вставкой формул, изменением форматов ячеек и т.д.), есть куча аналогов, так что видимо с документаций проблем нет.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 06.05.2013 в 12:24.
Alex11223 вне форума Ответить с цитированием
Старый 06.05.2013, 12:34   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Alex11223, приведите ради интереса пример кода на любом языке, желательно на VBA, который удаляет строку из Word-таблицы XML-средствами.

Дайте, пожалуйста, ссылку на сайт, где описано, как удалить строку из Word-таблицы с помощью XML.
Скрипт вне форума Ответить с цитированием
Старый 06.05.2013, 17:02   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
с помощью XML.
Я не имел в виду, что надо работать с ним как с XML документ. Это тоже наверно можно, спецификации открыты, но вряд ли прощe OLE.

Но есть библиотека Open XML SDK
http://msdn.microsoft.com/en-us/library/cc850835 — изменение текста в ячейке таблицы (внизу код).
Другие примеры и документация:
http://msdn.microsoft.com/en-us/office/ee358826.aspx
http://www.codeproject.com/Articles/...crosoft-Office
http://openxmldeveloper.org/
Судя по беглому гуглению примеров совсем не меньше, чем для OLE.

И есть куча оберток к ней, о них я и говорил в первую очередь, которые максимально упрощают использование.
Например вот код на C# из моего проекта (Excel, с Word'ом давно не было необходимости работать): добавление строк по 2 столбца в конец файла (Append), изменение типа ячеек на Text, выделение первой строки из добавленных зеленым цветом
Код:
            try
            {
                var excel = new XLWorkbook(filePath);
                var worksheet = excel.Worksheet(1);
                
                int startAppendRow = worksheet.LastRowUsed().RowNumber() + 1;

                for (int i = 0, j = startAppendRow; i < data.Count; i++, j++)
                {
                    worksheet.Cell(j, 1).Value = data[i].Phone;
                    worksheet.Cell(j, 1).DataType = XLCellValues.Text;
                    worksheet.Cell(j, 2).Value = data[i].Url;
                }

                for (int i = 1; i < 6; i++)
                    worksheet.Cell(startAppendRow, i).Style.Fill.BackgroundColor = XLColor.BrightGreen;

                 excel.Save();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Ошибка во время записи данных в файл " + filePath + ": " + ex.Message, "Ошибка",  MessageBoxImage.Error);
            }
Для OLE я не видел подобного, приходилось самому писать кучу функций-оберток, начиная с открытия файла.

Из плюсов: для работы программы не нужен установленный офис на компьютере. Лучше производительность.

Однако оказывается есть и недостаток: насколько я понял библиотека OpenXML SDK полноценно доступна только для .NET (C#, VB) и аналогов для других языков почти нет.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 06.05.2013 в 17:11.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OLE и Word Kopcuk Общие вопросы Delphi 1 30.08.2011 08:17
OLE Word batrak C++ Builder 0 13.05.2011 17:48
Ole сервер Word s100i29 C++ Builder 3 30.03.2011 21:45
Ole, word и межстрочное расстояние Hexen C++ Builder 1 06.10.2009 21:45
Word, ole, Альбомный лист K@$K@ Общие вопросы Delphi 2 16.04.2008 22:38