sexta-feira, 9 de dezembro de 2011

Relatório em Excel com Progress - Usando varios Recursos simples

Abaixo demonstro um exemplo de relatório em progress que gera arquivo em excel todo comentado, vejam que utilizo varios recursos interessantes como titulo, numero de pagina e outras dicas de formatação.....


/* Cria as variaveis necessárias para o relatório */DEF VAR chExcelApplication AS COM-HANDLE NO-UNDO.
DEF VAR chWorkbook AS COM-HANDLE NO-UNDO.
DEF var chworksheet AS com-handle.
DEF VAR m-linha AS INTEGER NO-UNDO. /* Variável p/ contagem das linhas */
ASSIGN m-linha = 1.

CREATE "Excel.Application" chExcelApplication. /* Cria a Planilha */
ASSIGN chWorkbook = chExcelApplication:Workbooks:ADD("")
       chworksheet=chexcelapplicAtion:sheets:item(1)
       chworksheet:name="Pasta do Relatório". /* Nome que será criada a Pasta da Planilha */
       m-linha = 2.

    ASSIGN chWorkSheet:PageSetup:Orientation = 1. /* Define papel como formato Retrato */
    ASSIGN chworksheet:range("A1:C1"):FONT:colorindex = 02 /* Aplica fonte cor Branca no Titulo */
       chworksheet:range("A1:C1"):MergeCells = TRUE. /* Cria a Planilha */
       chworksheet:range("A1:C1"):VALUE = "Titulo - Titulo do Relatório".
       chWorkSheet:Range("A1:C1"):HorizontalAlignment = 3. /* Centraliza o Titulo */
       chWorkSheet:Range("A1:C1"):Interior:colorindex = 01. /* Aplica fundo preto no titulo */

     /* Cria os titulos para as colunas do relatório */
    ASSIGN chworksheet:range("A2:C2"):font:bold = TRUE  /* Aplica negrito na linha de titulo das colunas */
        chworksheet:range("A" + STRING(m-linha)):VALUE = "TituloColuna A"
        chworksheet:range("B" + STRING(m-linha)):VALUE = "TituloColuna B"
        chworksheet:range("C" + STRING(m-linha)):VALUE = "TituloColuna C"
        m-linha = m-linha + 1.

       /* Faça o for each desejado */    FOR EACH tabela NO-LOCK:
            /* Lista os dados da tabela nas colunas */
            ASSIGN chworksheet:range("A" + STRING(m-linha)):VALUE = tabela.campo1
                chworksheet:range("B" + STRING(m-linha)):VALUE = tabela.campo2
                chworksheet:range("C" + STRING(m-linha)):VALUE = tabela.campo3.
                ASSIGN m-linha = m-linha + 1.       
    END.

    ASSIGN
    chExcelApplication:Range("B1:B65000"):NumberFormat = "dd/mm/aaaa"  /* Formato de data na col B */
    chExcelApplication:Range("C1:C65000"):NumberFormat = "#.##0,00". /* formato numerico c/2 dec na col C */
    chWorkSheet:PageSetup:RightFooter  = "&d/&t" + "-PAGINA:" + "&P/&N". /* Data/Hora e Nr Pg no Rodapé */
    chworksheet:range("B2:C2"):EntireColumn:AutoFit. /* Define automaticamente a largura das colunas */
    chExcelApplication:COLUMNS("A:A"):ColumnWidth = 25.00. /* Define manualmente a largura da coluna A */
    chExcelApplication:Rows("1:65000"):RowHeight  = 17.00. /* Tamanho da linha */
    chWorkSheet:PageSetup:PrintTitleRows  = "$1:$1". /* Adiciona o Titulo em todas as paginas de Impressao */
    chWorkSheet:PageSetup:Zoom  = 80. /* Aplica 80% para ajuste na impressao da pagina */

    chExcelApplication:Range("A1"):select.
    chExcelApplication:Visible = yes.

    RELEASE OBJECT chExcelApplication.
    RELEASE OBJECT chWorkbook.

3 comentários:

  1. Boa tarde Alexandre

    Estou tentando gerar uma relação de clientes, mas estou com problemas ao puxar o campo "emitente.observacoes". Este campo possui mais de uma linha e quando abre o excel, ele pega apenas a primeira linha.

    Como contornar isso?


    Abraço
    Valter

    ResponderExcluir
  2. c-observacao = replace(emitente.observacao,chr(10)," ")

    ResponderExcluir
  3. Bom dia, para enviar para impressora direto do excel, eu estou usando o comando:
    ch-Worksheet:printOut(1,1,1,FALSE,SESSION:pRINTER-NAME,FALSE, FALSE).
    achei este comando em um fórum, porém queria entender melhor o que ele faz...
    Eu estou em um RDP, porém eu quero que pegue a impressora que está na minha máquina, e não no servidor RDP que eu estou executando. Sabem como fazer?

    ResponderExcluir