Hola,
Estoy trabajando con dicho componente, y me da un error que no logro solucionar. Lo único que hace de momento la funcion es abrir el word y usando una plantilla guardarlo con un nombre basado en datos de la BD. Esto funciona bien, pero al volver a ejecutar la funcion me tira el siguiente error (la primera vez se ejecuta bien, segunda y sucesivas veces falla):
---------------------------
HRCHECK:
---------------------------
'this->get_Documents((Word_2k::Documents**)&prop)': El servidor RPC no está disponible.
@ c:\archivos de programa\borland\cbuilder6\include\vcl\Word_2k.h/5151
Press [Y]es to terminate, [N]o to continue and [C]ancel to Debug
---------------------------
Sí No Cancelar
---------------------------
El codigo es el siguiente:
Código:
void __fastcall Tmod_Informes::GeneraICB(TObject *consulta)
{
TVariant directorio = strcat(RUTA,DIRECTORIO_ICB);
TVariant plantilla = directorio.operator AnsiString() + (AnsiString)PLANTILLA_ICB ;
TVariant nombreInforme = directorio.operator AnsiString() + ((TQuery*) consulta)->Fields->FieldByName("codigo")->AsString +
"_"+ ((TQuery*) consulta)->Fields->FieldByName("denominacion")->AsString +
"_"+ FormatDateTime("dd-mm-yyyy",Now()) + "_destinatario.doc";
OleVariant Template = plantilla;
OleVariant NewTemplate = False;
try{
try{
wordApp->Connect();
wordApp->GetDefaultInterface()->Visible = True;
wordApp->Activate();
}catch(...){
ShowMessage("Error, el MS Word no está instalado o no se puede ejecutartar.\n"
"El MS Word es necesario para realizar el informe.");
wordApp->Disconnect();
Abort;
}
try{
wordApp->Documents->Open(Template, EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam);
}catch(...){
ShowMessage("Error, no se encuentra la plantilla del informe.");
wordApp->Disconnect();
Abort;
}
//Ponemos las siguientes opciones a false para que habra mas rapido
wordApp->Options->CheckSpellingAsYouType = False;
wordApp->Options->CheckGrammarAsYouType = False;
wordDoc->ConnectTo(wordApp->ActiveDocument);
wordApp->ActiveDocument->SaveAs(nombreInforme);
}catch(Exception &exception){
ShowMessage("Error al generar el informe comercial de bolsa.");
Application->ShowException(&exception);
wordApp->Disconnect();
wordApp->Quit();
Abort;
}
}
Porfavor quien pueda aportar algo que me ayude, no encuentro mucha documentacion sobre el tema. Y dudo si el problema reside en el código o en el MS Office, pero lo tengo que solucionar como sea. He leido que se puede atacar a Word mediante un objeto OLE , en vez de TWordApplication, pero no encuentro como implementarlo en C++, si alguien posee codigo ejemplo porfavor publiquelo en este hilo.
Gracias de antemano por vuestro tiempo.
PD: Trabajo con Borland Builder C++ 6.0 y MS Word 2002 SP-2