Como executar uma macro do Word, contendo parâmetros, através do Oracle Forms 6i

Devido a limitação do Oracle Reports, precisei gerar um documento diretamente no Word. Neste documento, criei uma macro que era responsável em escrever o documento e formatá-lo segundo o padrão definido por uma Lei específica. Para facilitar, isolei o código em uma função e bastava passar o título e o texto do corpo do documento que a macro fazia o resto.

O problema começou quando tive que abrir o documento e executar a macro através do Oracle Forms. Na Internet encontrei alguns exemplos ensinando como executar o Word, mas em lugar algum consegui encontrar como executar uma macro passando parâmetros. Após um dia tentando conseguir solucionar o problema, segue abaixo a solução:

No nosso exemplo, a macro se encontra no documento “C:modelo.doc” e sua execução deve ser feita invocando a assinatura abaixo:

[sourcecode language=”VB”]
Public Sub macroCriarDocumento (ByVal pstr_documentoTitulo as String, ByVal pstr_documentoCorpo as String)
[/sourcecode]

Abaixo segue o código do Oracle Forms 6i, que é responsável em abrir o documento “C:modelo.doc e executar a macro “macroCriarDocumento” e seus parâmetros:

[sourcecode language=”plain”]
PROCEDURE gerarDocumentoDOC (pstr_documentoEndereco IN VARCHAR2, pstr_documentoTitulo VARCHAR2, pstr_documentoCorpo IN VARCHAR2) IS

lobj_wordAplicativo OLE2.OBJ_TYPE; — Objeto do Word
lobj_wordDocumentos OLE2.OBJ_TYPE; — Objeto de conjunto de documentos do Word
lobj_wordDocumento OLE2.OBJ_TYPE; — Objeto do documento que será aberto
lobj_wordArgumentos OLE2.LIST_TYPE; — Objeto com lista de argumentos que será passado como parâmetro para o Word

temp OLE2.LIST_TYPE;

BEGIN

lobj_wordAplicativo := OLE2.CREATE_OBJ(‘Word.Application’); — Cria o objeto do Word
OLE2.SET_PROPERTY(lobj_wordAplicativo, ‘Visible’, 1); — Torna o objeto do Word visível

lobj_wordDocumentos:=OLE2.GET_OBJ_PROPERTY(lobj_wordAplicativo, ‘Documents’); — Obtem referência ao conjunto de documentos

— ———————————————————————-
— Abre documento modelo
— ———————————————————————-

lobj_wordArgumentos := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(lobj_wordArgumentos, ‘C:modelo.doc’); — Documento modelo com que contem a formatação pre-definida e as macros
lobj_wordDocumento := OLE2.INVOKE_OBJ(lobj_wordDocumentos, ‘Open’, lobj_wordArgumentos); — Abre o documento
OLE2.DESTROY_ARGLIST(lobj_wordArgumentos);

— ———————————————————————-
— Executa Macro contida no modelo que irá escrever o documento e salvá-
— lo na pasta destino.
— ———————————————————————-

lobj_wordArgumentos := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(lobj_wordArgumentos, ‘macroCriarDocumento’);
OLE2.ADD_ARG(lobj_wordArgumentos, pstr_documentoTitulo);
OLE2.ADD_ARG(lobj_wordArgumentos, pstr_documentoCorpo);
temp := OLE2.INVOKE_OBJ(lobj_wordAplicativo, ‘Run’, lobj_wordArgumentos);
OLE2.DESTROY_ARGLIST(lobj_wordArgumentos);

— ———————————————————————-
— Fecha o aplicativo Word e remove objetos da memória.
— ———————————————————————-

OLE2.RELEASE_OBJ(lobj_wordDocumento);
OLE2.RELEASE_OBJ(lobj_wordDocumentos);
OLE2.RELEASE_OBJ(lobj_wordAplicativo);

END;
[/sourcecode]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *