EXCEL COM FORMS

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
bertosro
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 18 Ago 2006 11:13 am
Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com

Olá Mestres!

Gostaria de saber se alguém conhece alguma maneira de interagir foms 6i com excel ou seja de dentro de uma aplicação forms eu quer gerar e abrir um arquivo no excel formatado.

Ecxel.pll alguém sabe como funciona/? A sua finalidade e para oque estou procurando?

muito Obrigado
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP

Brother,

Tem sim, como você gerar uma planilha no excel.

Eu enviei um fmb pro dr_gori e acho q ele vai estar colocando no site para download.

Abraços,

Trevisolli.
sydfilho
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 14 Mar 2005 3:36 pm
Localização: porto alegre

Pessoal, aonde está disponibilizado o arquivo que trata excel com forms ?

Abç
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Aqui está o arquivo:
DOWNLOAD

Valeu trevisolli por ter enviado o arquivo!!!


:-o
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Valeu Dr Gori...

Por disponibilizar para a galera.
Tendo mais, envio à vocês.
Avatar do usuário
tiagodutra
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qua, 19 Jan 2011 2:50 pm
Localização: Novo Hamburgo - RS
Tiago

Bom dia!!!

Pessoal estou tentando utilizar essa funcionalidade, baixei o form e ajustei o cursor e os campos para uma tabela de teste somente para ver se funcionaria, mas ele da um erro muito extranho ORA-305501, fui ao google mas não consegui entender o que esse erro quer dizer.
Alguém ai saberia me ajudar estou utilizando o banco 11g e o forms 10 eu vi no post que foi desenvolvido pro 6i pode ser este o motivo?

Desde já agradeço a ajuda e fico no aguardo de uma luz...
jfmartinatti
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 02 Out 2012 7:32 am
José Fabiano Martinatti
Analista de Sistemas Cia Muller de Bebidas
josemartinatti@ciamuller.com.br

Bom dia,

Eu fiz um PCK com várias funções para exportação de informação para o Excel, vou fazer uns acertos e coloco o codigo aqui pra vocês utilizarem.
Avatar do usuário
tiagodutra
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qua, 19 Jan 2011 2:50 pm
Localização: Novo Hamburgo - RS
Tiago

Opa PCKs são sempre bem vindas *-* valeu a força ai :wink:
jfmartinatti
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 02 Out 2012 7:32 am
José Fabiano Martinatti
Analista de Sistemas Cia Muller de Bebidas
josemartinatti@ciamuller.com.br

Segue abaixo:

Package Spec

Selecionar tudo

PACKAGE PCK_EXCEL IS

	--variáveis utilizadas em todos os processos da exportação do excel
	APLICACAO 	OLE2.OBJ_TYPE;
  PASTA_TRAB	OLE2.OBJ_TYPE; 
  PASTA  		  OLE2.OBJ_TYPE; 
  PLANILHA		OLE2.OBJ_TYPE; 
	PLANS       OLE2.OBJ_TYPE;
  ARGS 			  OLE2.LIST_TYPE; 
	OPCOES 	 	  OLE2.LIST_TYPE; 
	CELULA  		OLE2.LIST_TYPE; 
	PAGINA      OLE2.LIST_TYPE;

  -- variavel utilizada para geração do relatório
  PL_ID       PARAMLIST;


	-- variáveis Geração .bat
	ARQUIVO_BAT   TEXT_IO.FILE_TYPE;


PROCEDURE PRC_INICIALIZA
(
	CABECALHO VARCHAR2,
	RODAPE    VARCHAR2
);

PROCEDURE PRC_NUM_PLAN
(
	QTDE NUMBER
);



PROCEDURE PRC_PLAN_NOME
(
	NOME_PLANILHA IN VARCHAR2,
	NOVO_NOME     IN VARCHAR2
);



PROCEDURE PRC_PLANILHA
(
	NOME_PLANILHA IN VARCHAR2
);

PROCEDURE PRC_BORDA 
(
  COLUNA         IN     VARCHAR2,        -- A,B,C,D,...
  LINHA          IN     NUMBER,          -- 1,2,3,4,...
  TIPO_LINHA     IN     NUMBER   := 1,   -- 1,2,3,4,5,6,7,8
  LARGURA        IN     NUMBER   := 2,   -- 1,2,3,4
  COR            IN     NUMBER   := 1,   -- 1,2,3,4,...
  BORDA_SUPERIOR IN     VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_INFERIOR IN     VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_ESQUERDA IN     VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_DIREITA  IN     VARCHAR2 := 'S'  -- S PARA SIM OU N PARA NÃO
);



PROCEDURE PRC_BORDA_SEQUENCIA 
(
  COL_INICIO     IN     VARCHAR2,         -- A,B,C,D,...
  LIN_INICIO     IN     NUMBER,           -- 1,2,3,4,...
  COL_FIM        IN     VARCHAR2,         -- A,B,C,D,...
  LIN_FIM        IN     NUMBER,           -- 1,2,3,4,...
  TIPO_LINHA     IN     NUMBER   := 1,    -- 1,2,3,4,5,6,7,8
  LARGURA        IN     NUMBER   := 2,    -- 1,2,3,4
  COR            IN     NUMBER   := 1,    -- 1,2,3,4,...
  BORDA_SUPERIOR IN     VARCHAR2 := 'S',  -- S PARA SIM OU N PARA NÃO
  BORDA_INFERIOR IN     VARCHAR2 := 'S',  -- S PARA SIM OU N PARA NÃO
  BORDA_ESQUERDA IN     VARCHAR2 := 'S',  -- S PARA SIM OU N PARA NÃO
  BORDA_DIREITA  IN     VARCHAR2 := 'S'   -- S PARA SIM OU N PARA NÃO
);



PROCEDURE PRC_MESCLAR
(
  COL_INICIAL IN     VARCHAR2,		
  LIN_INICIAL IN     NUMBER,		
  COL_FINAL   IN     VARCHAR2,		
  LIN_FINAL   IN     NUMBER		
);



PROCEDURE PRC_PREENCHE
(		 
  COLUNA              VARCHAR2,                    -- coluna
  LINHA               NUMBER,                      -- linha
  TITULO              VARCHAR2,                    -- o que vai ser inserido na célula
  COL_TAMANHO         NUMBER,                      -- tamanho da coluna
  FONT_NOME           VARCHAR2,                    -- nome da fonte
  FONT_TAMANHO        VARCHAR2,                    -- tamanho da fonte
  FONT_NEGRITO        BOOLEAN  DEFAULT FALSE,      -- deve ser bold?
  FONT_ITALICO        BOOLEAN  DEFAULT FALSE,      -- deve ser itálico?
  COR_FONTE           NUMBER   DEFAULT 0,          -- índice da cor da fonte
  ALINHAMENTO         VARCHAR  DEFAULT 'ESQUERDA', -- alinhamento horizontal do texto
  FORMATO             VARCHAR2 DEFAULT NULL,       -- formato de entrada do dado ('Geral', '0','#.##0,00', 'dd/mm/aa', 'd/m/aa h:mm AM/PM', 'DD/MM/AAAA') 
  COR_FUNDO           NUMBER   DEFAULT 0,
  V_ORIENTACAO        NUMBER   DEFAULT 0          -- índice da cor de fundo
);



PROCEDURE PRC_PREENCHE_2
(
  COLUNA              VARCHAR2,              -- coluna
  LINHA               NUMBER,                -- linha
  TITULO              VARCHAR2,              -- o que vai ser inserido na célula
  COL_TAMANHO         NUMBER,                -- tamanho da coluna
  FONT_NOME           VARCHAR2,              -- nome da fonte
  FONT_TAMANHO        VARCHAR2,              -- tamanho da fonte
  FONT_NEGRITO        BOOLEAN,               -- deve ser bold?
  FONT_ITALICO        BOOLEAN,               -- deve ser itálico?
  COR_FONTE           NUMBER,                -- índice da cor da fonte
  ALINHAMENTO         VARCHAR,               -- alinhamento horizontal do texto
  FORMATO             VARCHAR2 DEFAULT NULL, -- formato de entrada do dado ('Geral', '0','#.##0,00', 'dd/mm/aa', 'd/m/aa h:mm AM/PM') 
  COR_FUNDO           NUMBER   DEFAULT 0,    -- índice da cor de fundo
  COL_FINAL						VARCHAR2,              -- coluna final para mesclar
  LIN_FINAL						NUMBER,                -- linha final para mesclar
  BORDAS              VARCHAR2 DEFAULT 'N',
  V_ORIENTACAO        NUMBER   DEFAULT 0
);


PROCEDURE PRC_PROTEGE
(
	V_PLAN VARCHAR2
);


PROCEDURE PRC_FINALIZA
(
	NOME_ARQUIVO VARCHAR2 DEFAULT 'Eportacao.xls'
);


FUNCTION FUN_SALVAR_ARQUIVO 
(
	NOME_ARQ_padrão VARCHAR2,
	TIPO_ARQ        VARCHAR2 	
) RETURN VARCHAR2; 
  
END;

Package Body:

Selecionar tudo

PACKAGE BODY PCK_EXCEL IS


-- inicializa a exportação do excel
PROCEDURE PRC_INICIALIZA
(
	CABECALHO VARCHAR2,
	RODAPE    VARCHAR2
) 
IS
BEGIN

   APLICACAO := OLE2.CREATE_OBJ('Excel.Application');
   OLE2.SET_PROPERTY(APLICACAO, 'Visible', TRUE);
   
   PASTA_TRAB  := OLE2.GET_OBJ_PROPERTY(APLICACAO, 'Workbooks');
   PASTA   := OLE2.INVOKE_OBJ(PASTA_TRAB, 'Add');
   PLANILHA := OLE2.GET_OBJ_PROPERTY(PASTA, 'Worksheets');
   
   --- apaga todas as planilhas, deixando apenas a Plan1
   OLE2.SET_PROPERTY(APLICACAO, 'DisplayAlerts', FALSE);
   WHILE OLE2.GET_NUM_PROPERTY(PLANILHA , 'Count') > 1
   LOOP
      args := OLE2.CREATE_ARGLIST;
      OLE2.ADD_ARG(args, 2); 
      PLANS := OLE2.GET_OBJ_PROPERTY(PASTA, 'Worksheets', args);   
      OLE2.DESTROY_ARGLIST(args);
      OLE2.INVOKE(PLANS, 'Delete'); 
      OLE2.RELEASE_OBJ(PLANS);
   END LOOP;
   OLE2.SET_PROPERTY(APLICACAO, 'DisplayAlerts', TRUE);

   args := OLE2.CREATE_ARGLIST;
   OLE2.ADD_ARG(args, 1); 
   PLANS := OLE2.GET_OBJ_PROPERTY(PASTA, 'Worksheets', args);  
   OLE2.DESTROY_ARGLIST(args);
   OLE2.INVOKE(PLANS, 'Select');  
   
   --- Cabeçalho e Rodape da Planilha
   PAGINA := OLE2.GET_OBJ_PROPERTY(PLANS, 'PageSetup');  
   OLE2.SET_PROPERTY(PAGINA, 'CenterHeader', '&"Arial,Bold" &12'||CABECALHO);  
   OLE2.SET_PROPERTY(PAGINA, 'CenterFooter', '&"Arial,Bold" &08'||RODAPE);  
END;



-- números de planilhas
PROCEDURE PRC_NUM_PLAN
(
	QTDE NUMBER
)
IS 
	I         NUMBER;
	NOME_ANT  NUMBER;
	NOME_NOVO NUMBER;
BEGIN
	
	IF QTDE > 1 THEN
		NOME_ANT  := QTDE;
		NOME_NOVO := QTDE;
		
		PRC_PLAN_NOME('Plan1', 'Plan_' || QTDE);
		
		-- cria as novas planilhas
		FOR I IN 2..QTDE LOOP
		  -- acrescenta planilhas
		  PLANS    := OLE2.GET_OBJ_PROPERTY (PASTA, 'Worksheets'); 
		  PLANILHA := OLE2.INVOKE_OBJ (PLANS,'Add');
		END LOOP;
		
		-- altera o nome das planilhas criadas
		FOR I IN 1..QTDE-1 LOOP
			NOME_NOVO := QTDE - I + 3;
			PRC_PLAN_NOME('Plan' || NOME_NOVO, 'Plan_' || I);
		END LOOP;

		-- retira o _ do nome das Planilhas
		FOR I IN 1..QTDE LOOP
			PRC_PLAN_NOME('Plan_' || I, 'Plan' || I);
		END LOOP;
		
	END IF;
		
END;



-- defini em qual planilha vai ser colocado os valores
PROCEDURE PRC_PLANILHA
(
	NOME_PLANILHA IN VARCHAR2 -- máximo 30 caracteres
)
IS
BEGIN
  ARGS := OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG( ARGS, NOME_PLANILHA ) ; 
  PLANILHA := OLE2.GET_OBJ_PROPERTY( PASTA, 'WORKSHEETS', ARGS ) ; 
  OLE2.DESTROY_ARGLIST( ARGS ) ;
END;



PROCEDURE PRC_PLAN_NOME
(
	NOME_PLANILHA IN VARCHAR2,
	NOVO_NOME     IN VARCHAR2
)
IS
BEGIN
	PRC_PLANILHA(NOME_PLANILHA);
	ole2.set_property(PLANILHA,'Name',NOVO_NOME);
END;



-- insere borda na celula informada
PROCEDURE PRC_BORDA 
(
  COLUNA         IN VARCHAR2,        -- A,B,C,D,...
  LINHA          IN NUMBER,          -- 1,2,3,4,...
  TIPO_LINHA     IN NUMBER   := 1,   -- 1,2,3,4,5,6,7,8
  LARGURA        IN NUMBER   := 2,   -- 1,2,3,4
  COR            IN NUMBER   := 1,   -- 1,2,3,4,...
  BORDA_SUPERIOR IN VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_INFERIOR IN VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_ESQUERDA IN VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_DIREITA  IN VARCHAR2 := 'S'  -- S PARA SIM OU N PARA NÃO
)
IS
  BORDERS         OLE2.LIST_TYPE;
  V_TIPO_LINHA    NUMBER;
  V_LARGURA       NUMBER;
BEGIN
	
/*
-------------------------------------------------------BORDAS 
xlDiagonalDown      constant number(5):=     5;       
xlDiagonalUp        constant number(5):=     6;       
xlEdgeBottom        constant number(5):=     9;				--BORDA DE BAIXO
xlEdgeLeft          constant number(5):=     7;				--BORDA DA ESQUERDA
xlEdgeRight         constant number(5):=    10;				--BORDA DA DIREITA
xlEdgeTop           constant number(5):=     8;				--BORDA DE CIMA
xlInsideHorizontal  constant number(5):=    12;       
xlInsideVertical    constant number(5):=    11;       
*/

	-- DEFINE OS VALORES CORRETOS DOS TIPOS DE LINHA
	IF TIPO_LINHA = 1 THEN V_TIPO_LINHA := 1;     END IF;
	IF TIPO_LINHA = 2 THEN V_TIPO_LINHA := -4115; END IF;
	IF TIPO_LINHA = 3 THEN V_TIPO_LINHA := 4;     END IF;
	IF TIPO_LINHA = 4 THEN V_TIPO_LINHA := 5;     END IF;
	IF TIPO_LINHA = 5 THEN V_TIPO_LINHA := -4118; END IF;
	IF TIPO_LINHA = 6 THEN V_TIPO_LINHA := -4119; END IF;
	IF TIPO_LINHA = 7 THEN V_TIPO_LINHA := -4142; END IF;
	IF TIPO_LINHA = 8 THEN V_TIPO_LINHA := 13;    END IF;
	
	--DEFINE OS VALORES CORRETOS DA LARGURA DA LINHA
	IF LARGURA = 3 THEN
		V_LARGURA := -4138;
	ELSE
		V_LARGURA := LARGURA;
	END IF;

	-- CONFIGURA A CÉLULA QUE IRÁ RECEBER A BORDA
	OPCOES := OLE2.CREATE_ARGLIST;
	OLE2.ADD_ARG(OPCOES, LINHA); 					
	OLE2.ADD_ARG(OPCOES, COLUNA); 					
	CELULA := OLE2.GET_OBJ_PROPERTY(PLANILHA, 'Cells', OPCOES);
	OLE2.DESTROY_ARGLIST(OPCOES);

	--CONFIGURAÇÃO BORDA ESQUERDA
	IF UPPER(BORDA_ESQUERDA) = 'S' THEN
		OPCOES:= ole2.create_arglist; 
  	ole2.add_arg(OPCOES, 7);  
		borders := OLE2.GET_OBJ_PROPERTY(CELULA, 'Borders', OPCOES);
		OLE2.DESTROY_ARGLIST(OPCOES);

		OLE2.SET_PROPERTY(borders, 'LineStyle', V_TIPO_LINHA);    
		OLE2.SET_PROPERTY(borders, 'Weight', V_LARGURA);
		OLE2.SET_PROPERTY(borders, 'ColorIndex', COR);
		OLE2.RELEASE_OBJ(borders);
	END IF;

  --CONFIGURAÇÃO BORDA SUPERIOR
	IF UPPER(BORDA_SUPERIOR) = 'S' THEN 
		OPCOES:= ole2.create_arglist; 
		ole2.add_arg(OPCOES, 8);  
		borders := OLE2.GET_OBJ_PROPERTY(CELULA, 'Borders', OPCOES);
		OLE2.DESTROY_ARGLIST(OPCOES);

		OLE2.SET_PROPERTY(borders, 'LineStyle', V_TIPO_LINHA);    
		OLE2.SET_PROPERTY(borders, 'Weight', V_LARGURA);
		OLE2.SET_PROPERTY(borders, 'ColorIndex', COR);
		OLE2.RELEASE_OBJ(borders);
	END IF;

	--CONFIGURAÇÃO BORDA INFERIOR
	IF UPPER(BORDA_INFERIOR) = 'S' THEN 
		OPCOES:= ole2.create_arglist; 
		ole2.add_arg(OPCOES, 9);  
		borders := OLE2.GET_OBJ_PROPERTY(CELULA, 'Borders', OPCOES);
		OLE2.DESTROY_ARGLIST(OPCOES);

		OLE2.SET_PROPERTY(borders, 'LineStyle', V_TIPO_LINHA);    
		OLE2.SET_PROPERTY(borders, 'Weight', V_LARGURA);
		OLE2.SET_PROPERTY(borders, 'ColorIndex', COR);
		OLE2.RELEASE_OBJ(borders);
	END IF;

	--CONFIGURAÇÃO BORDA DIREITA
	IF UPPER(BORDA_DIREITA)  = 'S' THEN 
		OPCOES:= ole2.create_arglist; 
		ole2.add_arg(OPCOES, 10); 
		borders := OLE2.GET_OBJ_PROPERTY(CELULA, 'Borders', OPCOES);
		OLE2.DESTROY_ARGLIST(OPCOES);
	
		OLE2.SET_PROPERTY(borders, 'LineStyle', V_TIPO_LINHA);    
		OLE2.SET_PROPERTY(borders, 'Weight', V_LARGURA);
		OLE2.SET_PROPERTY(borders, 'ColorIndex', COR);
		OLE2.RELEASE_OBJ(borders);
	END IF;

	-- FINALIZA CONFIGURAÇÃO DAS BORDAS
	OLE2.RELEASE_OBJ(CELULA);
  
END;



-- insere borda em uma sequencia informada
PROCEDURE PRC_BORDA_SEQUENCIA 
(
  COL_INICIO     IN     VARCHAR2,        -- A,B,C,D,... COLUNA PARA INICIAR A BORDA
  LIN_INICIO     IN     NUMBER,          -- 1,2,3,4,... LINHA PARA INICIAR A BORDA 
  COL_FIM        IN     VARCHAR2,        -- A,B,C,D,... COLUNA PARA FINALIZAR A BORDA
  LIN_FIM        IN     NUMBER,          -- 1,2,3,4,... LINHA  PARA FINALIZAR A BORDA
  TIPO_LINHA     IN     NUMBER   := 1,     -- 1,2,3,4,5,6,7,8
  LARGURA        IN     NUMBER   := 2,     -- 1,2,3,4
  COR            IN     NUMBER   := 1,     -- 1,2,3,4,...
  BORDA_SUPERIOR IN     VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_INFERIOR IN     VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_ESQUERDA IN     VARCHAR2 := 'S', -- S PARA SIM OU N PARA NÃO
  BORDA_DIREITA  IN     VARCHAR2 := 'S'  -- S PARA SIM OU N PARA NÃO
)
IS
BEGIN
	FOR I IN LIN_INICIO..LIN_FIM LOOP
		FOR J IN ASCII(COL_INICIO)-64..ASCII(COL_FIM)-64 LOOP
			PRC_BORDA (CHR(J+64), I, TIPO_LINHA, LARGURA, COR, BORDA_SUPERIOR, BORDA_INFERIOR, BORDA_ESQUERDA, BORDA_DIREITA);
		END LOOP;
	END LOOP;
END;



-- mescla as celulas informadas
PROCEDURE PRC_MESCLAR
(
  COL_INICIAL IN VARCHAR2,		
  LIN_INICIAL IN NUMBER,		
  COL_FINAL   IN VARCHAR2,		
  LIN_FINAL   IN NUMBER		
)
IS
	COLUMN 			OLE2.OBJ_TYPE;
  ROW 				OLE2.OBJ_TYPE;
BEGIN
  --MESCLAR TITULO
	OPCOES := OLE2.CREATE_ARGLIST;
	OLE2.ADD_ARG(OPCOES, COL_INICIAL || ':' || COL_FINAL); --COLUNA INICIAL E FINAL DE MESCLAR
	COLUMN:= OLE2.GET_OBJ_PROPERTY(PLANILHA,'COLUMNS',OPCOES);
	OLE2.DESTROY_ARGLIST(OPCOES);

	OPCOES := OLE2.CREATE_ARGLIST;
	OLE2.ADD_ARG(OPCOES, LIN_INICIAL || ':' || LIN_FINAL); --LINHA INICIAL E FINAL DE MESCLAR
	ROW := OLE2.GET_OBJ_PROPERTY(COLUMN, 'ROWS', OPCOES);
	OLE2.DESTROY_ARGLIST(OPCOES);
	OLE2.INVOKE(ROW, 'MERGE');
  
END;



-- preenche a celula
PROCEDURE PRC_PREENCHE
(
  COLUNA              VARCHAR2,              -- coluna
  LINHA               NUMBER,                -- linha
  TITULO              VARCHAR2,              -- o que vai ser inserido na célula
  COL_TAMANHO         NUMBER,                -- tamanho da coluna
  FONT_NOME           VARCHAR2,              -- nome da fonte
  FONT_TAMANHO        VARCHAR2,              -- tamanho da fonte
  FONT_NEGRITO        BOOLEAN,               -- deve ser bold?
  FONT_ITALICO        BOOLEAN,               -- deve ser itálico?
  COR_FONTE           NUMBER,                -- índice da cor da fonte
  ALINHAMENTO         VARCHAR,               -- alinhamento horizontal do texto
  FORMATO             VARCHAR2 DEFAULT NULL, -- formato de entrada do dado ('Geral', '0','#.##0,00', 'dd/mm/aa', 'd/m/aa h:mm AM/PM') 
  COR_FUNDO           NUMBER   DEFAULT 0,
  V_ORIENTACAO        NUMBER   DEFAULT 0     -- índice da cor de fundo
)
IS    
                        
FONT       OLE2.OBJ_TYPE;
V_INTERIOR OLE2.OBJ_TYPE;
ALIGN      BINARY_INTEGER;
V_COLUNA   NUMBER;
  
BEGIN
	V_COLUNA:=ASCII(UPPER(COLUNA))-64;
	
	-- ALINHAMENTO DA CÉLULA
	ALIGN := 1;
	IF UPPER(ALINHAMENTO) = 'GERAL'       THEN ALIGN := 1;      END IF; 
	IF UPPER(ALINHAMENTO) = 'CENTRALIZAR' THEN ALIGN := - 4108; END IF; 
	IF UPPER(ALINHAMENTO) = 'JUSTIFICAR'  THEN ALIGN := - 4130; END IF;  
	IF UPPER(ALINHAMENTO) = 'ESQUERDA'    THEN ALIGN := - 4131; END IF;  
	IF UPPER(ALINHAMENTO) = 'DIREITA'     THEN ALIGN := - 4152; END IF;    
	IF UPPER(ALINHAMENTO) = 'DITRIBUI'    THEN ALIGN := - 4117; END IF;    
	 
	
  OPCOES := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG(OPCOES, LINHA);  
  OLE2.ADD_ARG(OPCOES, V_COLUNA); 
  CELULA := OLE2.GET_OBJ_PROPERTY(PLANILHA, 'CELLS', OPCOES);
  OLE2.DESTROY_ARGLIST(OPCOES);

  -- caso o valor passado seja do tipo número ele troca o . por , no decimal
  if FORMATO = '#.##0,00' then
   	OLE2.SET_PROPERTY(CELULA, 'VALUE', replace(TITULO, '.', ',')); 
  else
   	OLE2.SET_PROPERTY(CELULA, 'VALUE', TITULO); 	
  end if;
  
  if FORMATO = '#.##0,00_ ;[Vermelho]-#.##0,00 ' then
   	OLE2.SET_PROPERTY(CELULA, 'VALUE', replace(TITULO, '.', ',')); 
  else
   	OLE2.SET_PROPERTY(CELULA, 'VALUE', TITULO); 	
  end if;

  -- VERIFICA SE FOI PASSADO O TAMANHO DA COLUNA
  if COL_TAMANHO is not null then
    OLE2.SET_PROPERTY(CELULA, 'COLUMNWIDTH', COL_TAMANHO);
  end if; 
   
  -- altera a config do texto
  FONT := OLE2.GET_OBJ_PROPERTY (CELULA, 'Font');
  OLE2.SET_PROPERTY (font, 'Name',   FONT_NOME);
  OLE2.SET_PROPERTY (font, 'Size',   FONT_TAMANHO);
  OLE2.SET_PROPERTY (font, 'Bold',   FONT_NEGRITO);
  OLE2.SET_PROPERTY (font, 'Italic', FONT_ITALICO);

  -- ALTERA CORES DA ÁRVORE 
  OLE2.SET_PROPERTY(font, 'ColorIndex', COR_FONTE);  --0,Preto (3, Red)
  
  if Align is not null then
    OLE2.SET_PROPERTY(CELULA, 'HorizontalAlignment', Align);
  end if; 

  -- quebra automatica de texto
  OLE2.SET_PROPERTY(CELULA, 'WrapText', true);

	-- orientação do texto na célula
  OLE2.SET_PROPERTY(CELULA, 'Orientation', V_ORIENTACAO);

  -- centraliza quando existe mesclagem
  OLE2.SET_PROPERTY(CELULA, 'VerticalAlignment', - 4108);
  
  --FORMATO DO NÚMERO
  if formato is not null then
    OLE2.SET_PROPERTY(CELULA, 'NumberFormat', formato);
  END IF;
  
  v_interior := ole2.get_obj_property(CELULA,'Interior');
  ole2.set_property(v_interior,'ColorIndex',COR_FUNDO); 
  ole2.release_obj(v_interior);

  OLE2.RELEASE_OBJ(FONT);   
  OLE2.RELEASE_OBJ(CELULA);
END;



-- preenche celula com mesclagem de celulas e bordas
PROCEDURE PRC_PREENCHE_2
(
  COLUNA              VARCHAR2,              -- coluna
  LINHA               NUMBER,                -- linha
  TITULO              VARCHAR2,              -- o que vai ser inserido na célula
  COL_TAMANHO         NUMBER,                -- tamanho da coluna
  FONT_NOME           VARCHAR2,              -- nome da fonte
  FONT_TAMANHO        VARCHAR2,              -- tamanho da fonte
  FONT_NEGRITO        BOOLEAN,               -- deve ser bold?
  FONT_ITALICO        BOOLEAN,               -- deve ser itálico?
  COR_FONTE           NUMBER,                -- índice da cor da fonte
  ALINHAMENTO         VARCHAR,               -- alinhamento horizontal do texto
  FORMATO             VARCHAR2 DEFAULT NULL, -- formato de entrada do dado ('Geral', '0','#.##0,00', 'dd/mm/aa', 'd/m/aa h:mm AM/PM') 
  COR_FUNDO           NUMBER   DEFAULT 0,    -- índice da cor de fundo
  COL_FINAL						VARCHAR2,
  LIN_FINAL						NUMBER,
  BORDAS              VARCHAR2 DEFAULT 'N',
  V_ORIENTACAO        NUMBER   DEFAULT 0
) IS
BEGIN
	-- preenche celula
	PRC_PREENCHE
										(
										  COLUNA,
										  LINHA,
										  TITULO,
										  COL_TAMANHO,
										  FONT_NOME,
										  FONT_TAMANHO,
										  FONT_NEGRITO,
										  FONT_ITALICO,
										  COR_FONTE,
										  ALINHAMENTO,
										  FORMATO,
										  COR_FUNDO,
										  V_ORIENTACAO
										);
										
	-- desenha bordas
	IF BORDAS = 'S' THEN
	 PRC_BORDA_SEQUENCIA 
														(
														  COLUNA,
														  LINHA,
														  COL_FINAL,
														  LIN_FINAL,
														  1,
														  2,
														  1,
														  'S',
														  'S',
														  'S',
														  'S'
														);		
	END IF;
										
	-- mesclagem
	IF ((COL_FINAL <> COLUNA) OR (LIN_FINAL <> LINHA)) THEN
		PRC_MESCLAR
											(
											  COLUNA,
											  LINHA,
											  COL_FINAL,
											  LIN_FINAL
											);	
	END IF;
	
END;



-- proteger planilha
PROCEDURE PRC_PROTEGE
(
	V_PLAN VARCHAR2
) 
IS
BEGIN
  PRC_PLANILHA(V_PLAN);
  OLE2.SET_PROPERTY(PLANILHA, 'Protect', true); 
  --OLE2.SET_PROPERTY(PLANILHA, 'Password', 'teste' ) ; -- falta comando para colocar a senha na planilha
END;	



-- finaliza exportação para o excel
PROCEDURE PRC_FINALIZA 
(
	NOME_ARQUIVO VARCHAR2 DEFAULT 'Exportacao.xls'
)
IS
	SALVAR VARCHAR2(2000);
BEGIN

  -- ABRE CAIXA DE DIALOGO SALVAR COMO... DO WINDOWS
  SALVAR := FUN_SALVAR_ARQUIVO(NOME_ARQUIVO,'Excel (*.xls)|*.xls|');

  -- PERMITE AO USER VER A APLICAÇÃO DO EXCEL PARA VER O RESULTADO.
  OLE2.SET_PROPERTY(APLICACAO, 'VISIBLE', TRUE ) ; 
  

  -- SALVANDO O ARQUIVO 
  OPCOES := OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG(OPCOES, SALVAR); 
  OLE2.INVOKE(PLANILHA, 'SaveAs', OPCOES); 
  OLE2.DESTROY_ARGLIST(OPCOES); 

  -- LIBERA RECIPIENTES DA MEMÓRIA
  OLE2.RELEASE_OBJ(PAGINA);
  OLE2.RELEASE_OBJ(PLANILHA); 
  OLE2.RELEASE_OBJ(PASTA); 
  OLE2.RELEASE_OBJ(PASTA_TRAB); 
  OLE2.RELEASE_OBJ(APLICACAO); 

	-- CASO ACONTEÇA ALGUMA COISA ERRADA    
	EXCEPTION          
	WHEN OTHERS THEN 
		CLEAR_MESSAGE; 
		OLE2.RELEASE_OBJ(PLANILHA); 
		OLE2.RELEASE_OBJ(PASTA); 
		OLE2.RELEASE_OBJ(PASTA_TRAB); 
		OLE2.RELEASE_OBJ(APLICACAO); 
		
		MESSAGE('Error'||sqlerrm); 
		 
		PCK_FUNCOES.PRC_MENSAGEM('ALERTA', 'Erro', 'Erro ao Exportar Arquivo...', '  OK  ');
		
		RAISE FORM_TRIGGER_FAILURE; 
END;


	
FUNCTION FUN_SALVAR_ARQUIVO 
(
	NOME_ARQ_padrão VARCHAR2,
	TIPO_ARQ        VARCHAR2 	
)
RETURN VARCHAR2 
IS
BEGIN
	RETURN WIN_API_DIALOG.SAVE_FILE(NOME_ARQ_padrão,'Salvar arquivo como: ','Desktop', TIPO_ARQ, true);
END;
	
END;
jfmartinatti
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 02 Out 2012 7:32 am
José Fabiano Martinatti
Analista de Sistemas Cia Muller de Bebidas
josemartinatti@ciamuller.com.br

Estou fazendo uma para Word quando terminar de fazer todos os processos eu coloco aqui.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes