Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка содержимого буфера в Word через OLE 
:(
    Опции темы
Нитонисе
Дата 14.6.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Создаю и открываю Word документ.
Код

  Variant WordApp, WordDoc;
  WordApp=CreateOleObject("Word.Application");
  WordApp.OlePropertySet("Visible",true);
  WordDoc=WordApp.OlePropertyGet("Documents");
  WordDoc.OleProcedure("Add");

Нужно вставить в документ содержимое буфера обмена. Как это сделать?
PM MAIL   Вверх
Usper
Дата 15.6.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Как-то так:
Код

  Variant WordApp, WordDoc, WordParagraph;
  WordApp=CreateOleObject("Word.Application");
  WordApp.OlePropertySet("Visible",true);
  WordApp.OlePropertyGet("Documents").OleProcedure("Add");
  WordDoc = WordApp.OlePropertyGet("Documents").OleFunction("Item",1);
  //WordDoc.OlePropertyGet("Paragraphs").OleProcedure("Add");
  WordParagraph = WordDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1);
  WordParagraph.OlePropertyGet("Range").OleFunction("Paste");


То есть нужно вызвать метод "Paste", который применим, судя по справке, к объектам "Range" и "Selection". Возможно, к этим объектам можно добраться более коротким путём, не через параграф, но мне этого не удалось.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Нитонисе
Дата 15.6.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Что-то у меня ошибка на строчке
Код

WordParagraph = WordDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1);

Класс ошибки EOleSysError с сообщением "Вызов был отклонен".
Если раскомментировать строчку 
Код

WordDoc.OlePropertyGet("Paragraphs").OleProcedure("Add");

То таже ошибка, но уже на ней.
PM MAIL   Вверх
Usper
Дата 15.6.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Кхм... А мой код был полностью скопипащен? У меня WordDoc ссылается на конкретный документ, а не на все документы:
Код

WordDoc = WordApp.OlePropertyGet("Documents").OleFunction("Item",1);

вместо
Код

WordDoc=WordApp.OlePropertyGet("Documents");

у себя код проверял - работаетс. 
З.Ы. Кстати, версия офиса какая?
З.З.Ы. в буфере обмена должно быть подходящее содержимое, иначе у меня вылезает ошибка "ошибка" smile.

Это сообщение отредактировал(а) Usper - 15.6.2011, 13:14


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Нитонисе
Дата 15.6.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(Usper @  15.6.2011,  12:58 Найти цитируемый пост)
Кхм... А мой код был полностью скопипащен?

Да, скопипастил полностью... Word 2002.

Попробуйте у себя способ вставки вместо доступа к параграфу вот такой:
Код

 WordDoc .OlePropertyGet("Selection").OleFunction("Paste");

PM MAIL   Вверх
Usper
Дата 15.6.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Ошибка "Неизвестное имя".


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Нитонисе
Дата 15.6.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(Usper @  15.6.2011,  13:35 Найти цитируемый пост)
Ошибка "Неизвестное имя".

А если попробовать
Код

 WordApp.OlePropertyGet("Selection").OleFunction("Paste");

При работе через спец-компоненты вот такой код работает:
Код

WordApplication1->Selection->Paste();


Добавлено @ 13:43
О, сработало!  smile 

Это сообщение отредактировал(а) Нитонисе - 15.6.2011, 13:43
PM MAIL   Вверх
Нитонисе
Дата 15.6.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Теперь другой вопрос. Как задать в открытом документе отступ слева?
На VBА это выглдет так 
Код

ActiveDocument.PageSetup.TopMargin = CentimetersToPoints(1)

PM MAIL   Вверх
Usper
Дата 15.6.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Ну это довольно просто:
Код

  Variant WordApp, WordDoc, WordParagraph;
  WordApp=CreateOleObject("Word.Application");
  WordApp.OlePropertySet("Visible",true);
  WordApp.OlePropertyGet("Documents").OleProcedure("Add");
  WordDoc = WordApp.OlePropertyGet("Documents").OleFunction("Item",1);
  WordDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin",100/3.53); //величина 100/3,53 получена методом научного тыка

Только это не левое поле, а верхнее  smile 


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Нитонисе
Дата 15.6.2011, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



А я все бьюсь с этой командой и не могу заставить ее работать. В том числе не работает и ваш код. Все время возникает ошибка на строчке, содержащей OlePropertyGet("PageSetup") с сообщением "Вызов был отклонен".
PM MAIL   Вверх
Usper
Дата 15.6.2011, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



А скомпиленый у меня проект будет работать?


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  COMProject.zip 235,17 Kb


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Нитонисе
Дата 15.6.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Ошибка - вызов был отклонен.
Похоже что-то не так с моим вордом.
PM MAIL   Вверх
Usper
Дата 15.6.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Дя... стрянно... у меня 2003 и всё работает. Впрочем я уже сталкивался с тем, что в 2007 офисе не работает код который работает в 2003. Причём VBA скрипт для необходимых действий генерируется абсолютно одинаковый, но через OLE некоторые команды, такое ощущение, просто не передаются или не принимаются.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1017 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.