Pck para exportar para Excel.

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
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

Boa tarde, segue abaixo PCK para exportar do Forms para o Excel, em breve para exportar para o Word.

Qualque coisa entrem em contato.

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

Modelo Simples de como utilizar:

Selecionar tudo

		-- inicializa exportação para o excel
		PCK_EXCEL.PRC_INICIALIZA('Cabeçalho','Rodapé') ;
		
		-- número de Planilhas do Excel
		PCK_EXCEL.PRC_NUM_PLAN(1);
		
		-- HABILITA A EDIÇÃO DA PLANILHA
		PCK_EXCEL.PRC_PLANILHA('PLAN1');

		-- PREENCHE A CELULA
		PCK_EXCEL.PRC_PREENCHE_2('A',1,'TEXTO',10,'Arial',10,TRUE,FALSE,0,'CENTRALIZAR','GERAL',0,'A',1, 'S');

		-- alterar nome da Planilha PLAN1 para Planilha 1
		PCK_EXCEL.PRC_PLAN_NOME('PLAN1', 'Planilha 1');

		-- Protege a Planilha 1 contra alterações
		PCK_EXCEL.PRC_PROTEGE('Planilha 1');

		-- finaliza exportação excel
		PCK_EXCEL.PRC_FINALIZA();  




Procedure com um uso mais completo, com tabela de cores, tipos de linhas, etc...

Selecionar tudo

PROCEDURE EXCEL_EXPORTACAO_MODELO IS

BEGIN

		-- inicializa exportação para o excel
		PCK_EXCEL.PRC_INICIALIZA('Cabeçalho','Rodape') ;
		
		
		PCK_EXCEL.PRC_NUM_PLAN(5);

		PCK_EXCEL.PRC_PLANILHA('PLAN1');
		
		-- tipo de linha
		FOR I IN 1..5 LOOP
			PCK_EXCEL.PRC_BORDA('A', I*2, I, 2, 1, 'S', 'S', 'S', 'S');
			PCK_EXCEL.PRC_PREENCHE('A', I*2,'AAAAAAAA AAAAAAA AAAAAA AAAAA AAAAA AAAAAAAAAAA AAAAAA TIPO DE LINHA ' || I, 25,'Arial',10,FALSE,FALSE,0,'QUEBRATEXTO','GERAL',0);
			PCK_EXCEL.PRC_PREENCHE('B', I*2,'BBBBB BBBBBBB B BBBBBB BBBBBB BBBB BBBBBBBBB BBBBB BB BBB TIPO DE LINHA ' || I, 25,'Arial',10,FALSE,FALSE,0,'QUEBRATEXTO','GERAL',0);
		END LOOP;
	
		-- largura da linha
		FOR I IN 1..4 LOOP
			PCK_EXCEL.PRC_BORDA ('C', I*2, 1, I, 1, 'S', 'S', 'S', 'S');
			PCK_EXCEL.PRC_PREENCHE('C', I*2,'LARGURA LINHA ' || I, 25, 'Arial', 10, FALSE, FALSE, 0, 'CENTRALIZAR', 'GERAL', 0, 90);
		END LOOP;
	
  	PCK_EXCEL.PRC_PLANILHA('PLAN2');
		-- tabela de cores
		FOR I IN 1..56 LOOP
			PCK_EXCEL.PRC_BORDA ('A', I, 1, 1, 1, 'S', 'S', 'S', 'S');
			PCK_EXCEL.PRC_PREENCHE('A', I,'COR ' || I, 25,'Arial',10, FALSE, FALSE, 0, 'CENTRALIZAR', 'GERAL', I);
		END LOOP;
		
  	PCK_EXCEL.PRC_PLANILHA('PLAN3');
	
		-- mescla texto com a função de mesclar
		PCK_EXCEL.PRC_PREENCHE('A',1,'TESTE TEXTO MESCLANDO COM FUNÇÃO MESCLAR',10,'Arial',10,TRUE,FALSE,0,'CENTRALIZAR','GERAL',0);
		PCK_EXCEL.PRC_MESCLAR ('A', 1, 'G', 1);

		-- mescla texto com a função de preenchimento
		PCK_EXCEL.PRC_PREENCHE_2('A',5,'TESTE TEXTO MESCLANDO NO PREENCHIMENTO',          10,'Arial',10,TRUE,FALSE,0,'CENTRALIZAR','GERAL',0,'D',5);

		-- mescla texto com a função de preenchimento e coloca borda
		PCK_EXCEL.PRC_PREENCHE_2('A',9,'TESTE TEXTO MESCLANDO NO PREENCHIMENTO COM BORDA',10,'Arial',10,TRUE,FALSE,0,'CENTRALIZAR','GERAL',0,'D',9, 'S');
	
		--modelo de valor 
		PCK_EXCEL.PRC_PREENCHE('A', 11,'MODELO VALOR',17,'Arial',10,TRUE ,FALSE,0,'CENTRALIZAR','GERAL',  0);
		PCK_EXCEL.PRC_PREENCHE('B', 11, 10250.65,     17,'Arial',10,FALSE,FALSE,0,'CENTRALIZAR','#.##,00',0);

		-- modelo datas
		PCK_EXCEL.PRC_PREENCHE('A', 13, 'MODELO DATAS',                 17, 'Arial', 10, TRUE,  FALSE, 0, 'CENTRALIZAR', 'GERAL',     0);
		PCK_EXCEL.PRC_PREENCHE('B', 13, TO_CHAR(SYSDATE, 'DD/MM/RRRR'), 17, 'Arial', 10, FALSE, FALSE, 0, 'CENTRALIZAR', 'DD/MM/AAAA',0);
		PCK_EXCEL.PRC_PREENCHE('C', 13, TO_CHAR(SYSDATE, 'DD/MM/RRRR'), 17, 'Arial', 10, FALSE, FALSE, 0, 'CENTRALIZAR', 'MM/AAAA',   0);
		PCK_EXCEL.PRC_PREENCHE('D', 13, TO_CHAR(SYSDATE, 'DD/MM/RRRR'), 17, 'Arial', 10, FALSE, FALSE, 0, 'CENTRALIZAR', 'MMMM/AAAA', 0);

		
		-- coloca borda em uma sequencia de colunas e linhas
		PCK_EXCEL.PRC_BORDA_SEQUENCIA('A', 15, 'G', 25, 1, 2, 1, 'S', 'S', 'S', 'S');
	
		PCK_EXCEL.PRC_PLAN_NOME('PLAN1', 'TESTE 1');
		PCK_EXCEL.PRC_PLAN_NOME('PLAN2', 'NOVO 1');
		PCK_EXCEL.PRC_PLAN_NOME('PLAN3', 'TT 1');
		PCK_EXCEL.PRC_PLAN_NOME('PLAN4', 'TSSS 1');
		PCK_EXCEL.PRC_PLAN_NOME('PLAN5', 'sss 1');

		-- proteger 
		PCK_EXCEL.PRC_PROTEGE('TESTE 1');
		-- finaliza exportação excel
		PCK_EXCEL.PRC_FINALIZA;  

	END IF;		
  
END;
Responder
  • Informação
  • Quem está online

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