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.
Boa tarde Alexandre
ResponderExcluirEstou 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
c-observacao = replace(emitente.observacao,chr(10)," ")
ResponderExcluirBom dia, para enviar para impressora direto do excel, eu estou usando o comando:
ResponderExcluirch-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?