Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повторный запуск Word и ошибка RPC 
V
    Опции темы
JackyFox
Дата 3.12.2010, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте!

Стоит задача формирования некоторого документа в Ворде средствами C++ Builder 2006.
И задача в принципе решена с помощью помпонентов WordApplication и WordDocument из группы OfficeXP при работе с 2007-м офисом.

Подключаюсь к серверу, выполняю все требуемые действия, к примеру, по нажатию кнопки:

Код

void __fastcall TOLETest::Button1Click(TObject *Sender)
{
    TVariant T = ExtractFilePath(Application->ExeName) + "\\HardwareRequest.dot";
    try
    {
        WordApplication1->Connect();
    }
    catch (...)
    {
        ShowMessage("Ворд не запускается :(");
        return;
    }
    WordApplication1->Options->CheckSpellingAsYouType = false;
    WordApplication1->Options->CheckGrammarAsYouType = false;
    WordApplication1->Documents->Add(&T, EmptyParam);

    WordDocument1->ConnectTo(WordApplication1->ActiveDocument);

    // Это моя обёртка, см. ниже
    FnR("{ReqNum}", ReqNum, WordDocument1);
    FnR("{ActNum}", ActNum, WordDocument1);
    FnR("{Customer}", Customer, WordDocument1);

    WordApplication1->Visible = true;
}


Функция FnR выполняет замену ключевого слова на данное значение в указанном документе. Самопальная

Код

bool FnR(AnsiString F, AnsiString R, TWordDocument *WordDoc)
{
    TVariant True = true;
    TVariant False = false;
    TVariant Wrap = 2;
    TVariant FindText = F;
    TVariant ReplaceWith = R;

    WordDoc->Content->Find->ClearFormatting();
    WordDoc->Content->Find->Replacement->ClearFormatting();

    return WordDoc->Content->Find->Execute(
        /*VARIANT* FindText [in,opt]*/          FindText,
        /*VARIANT* MatchCase [in,opt]*/         False,
        /*VARIANT* MatchWholeWord [in,opt]*/    False,
        /*VARIANT* MatchWildcards [in,opt]*/    False,
        /*VARIANT* MatchSoundsLike [in,opt]*/   False,
        /*VARIANT* MatchAllWordForms [in,opt]*/ False,
        /*VARIANT* Forward [in,opt]*/           True,
        /*VARIANT* Wrap [in,opt]*/              False,
        /*VARIANT* Format [in,opt]*/            False,
        /*VARIANT* ReplaceWith [in,opt]*/       ReplaceWith,
        /*VARIANT* Replace [in,opt]*/           Wrap,
        /*VARIANT* MatchKashida [in,opt]*/      False,
        /*VARIANT* MatchDiacritics [in,opt]*/   False,
        /*VARIANT* MatchAlefHamza[in,opt]*/     False,
        /*VARIANT* MatchControl [in,opt]*/      False
        );
}


С этим всё в порядке до тех пор, пока я не закрою окно Ворда, созданное программой и не нажму на кнопку еще раз (см. первый листинг). При этом Коннект проходит, но последующее обращение к WordApplication приводит к ошибке:

user posted image

Объясните, что я пропутил пропустил?

Это сообщение отредактировал(а) JackyFox - 4.12.2010, 21:50
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Нитонисе
Дата 3.12.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(JackyFox @  3.12.2010,  17:06 Найти цитируемый пост)
Объясните, что я пропутил?

Повесьте на событие WordApplicationOnQuit WordApllication1->Disconnect();
PM MAIL   Вверх
JackyFox
Дата 6.12.2010, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нитонисе, спасибо, это решило проблему.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Нитонисе
Дата 6.12.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тут есть еще одна проблема, которую я так и не решил, может вы решили...
При закрытии программы, из которой я создал ворд-отчет, закрывается и этот вордовский документ (выскакивает окошко с предложением сохранить файл). Сколько отчетов я создал - все они хотят закрыться. Как бы это избежать - не придумал.
PM MAIL   Вверх
JackyFox
Дата 6.12.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нитонисе, у меня тоже самое происходит. Как такого избежать не знаю, к сожалению.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Usper
Дата 6.12.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В 6-ом Builder`е у WordAplication есть свойство AutoQuit, в 2006 его нет?

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


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


Бывалый
*


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

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



Usper, свойство есть, но оно почему-то не помогает smile Только при ручном указании 

Код

void __fastcall from::WordApplication1Quit(TObject *Sender)
{
    WordApplication1->Disconnect();
}


Можно продолжать изгаляться с сервером Ворда
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Usper
Дата 6.12.2010, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну что тут можно сказать... Пользуйтесь управлением сервером Word через OLE, а не через компоненты. Там такой проблемы нет.


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


Бывалый
*


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

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



Usper, извините, а можно я всё-таки вот с компонентами как в предыдущем сообщении? Мне главное, чтоб работало. ;)
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Нитонисе
Дата 6.12.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

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

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

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

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


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

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


 




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


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

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