Criando aplicação entre Progress e Excel e configurando planilha
Criando variáveis COM-HANDLE para interação do Progress com o Excel
DEF VAR excelappl AS COM-HANDLE NO-UNDO. DEF VAR ChWorkSheet AS COM-HANDLE NO-UNDO.
Criando a aplicação Excel
CREATE "excel.application" excelappl.
Abrir um arquivo (2 formas).
1 – em branco
excelappl:workbooks:ADD().
2 – Utilizando um modelo já existente do excel
excelappl:workbooks:ADD(c-modelo).
Onde c-modelo é o nome do arquivo excel modelo. Essa variável deve ter o conteúdo completo do arquivo, ou seja, diretório + nome do arquivo (usar sempre arquivo .xlt -> modelo)
Fechando o Excel
excelappl:quit().
Usar apenas quando quiser fechar o excel, como por exemplo após uma impressão. Se quiser que o arquivo fique aberto para consulta ou para salvá-lo manualmente, não utilizar esse comando.
Esse comando fecha a planilha excel mas não libera o handle da aplicação, vide nota abaixo.
Liberando o Handle ao final da execução
(muito importante, inserir esse comando sempre ao final do programa, pois mesmo se o Excel é fechado pelo usuário, a handle fica na memória.)
RELEASE OBJECT excelappl NO-ERROR. RELEASE OBJECT chWorksheet NO-ERROR.
Repetir o Release para todas as variáveis com-handle.
Selecionar pastas
excelappl:worksheets:ITEM(1):SELECT.
O número relacionado ao ITEM é a pasta que deseja selecionar
Adicionar pastas
excelappl:sheets:ADD.
Quando o comando acima é executado, a nova planilha criada passa a ser a corrente. Caso queira inserir informações em outras planilhas, é necessário selecionar a planilha desejada conforme tópico acima.
Copiar pastas
excelappl:sheets:item(“Plan 1”):activate.
excelappl:Sheets(“Plan 1”):Copy(excelappl:Sheets(1)).
“Plan 1” é o nome da pasta a ser copiada. (geralmente o excel sugere “Plan 1”). Se for diferente, basta substituir.
Sheets(1) é o lugar onde a pasta será copiada. 1 é a primeira pasta, caso queira inserir no final, criar uma variável de controle.
Renomear pastas
excelappl:worksheets:ITEM(i-item):SELECT.
excelappl:worksheets:ITEM(i-item):NAME = “XYZ”.
excelappl:worksheets:ITEM(i-item):NAME = TRIM(item.it-codigo).
Não esquecer de selecionar a pasta primeiro. A variável i-item é a pasta a ser renomeada, que pode receber uma constante ou o valor de uma variável lembrando que não podem ser utilizados caracteres especiais como /, *, [, ].
Sugiro criar uma variável e substituir esses caracteres:
ASSIGN c-sheet = REPLACE(c-sheet,"/","_"). ASSIGN c-sheet = REPLACE(c-sheet,"\","_"). ASSIGN c-sheet = REPLACE(c-sheet,"[","("). ASSIGN c-sheet = REPLACE(c-sheet,"]",")"). ASSIGN c-sheet = REPLACE(c-sheet,"*","x"). ASSIGN c-sheet = REPLACE(c-sheet,":","."). ASSIGN c-sheet = REPLACE(c-sheet,"?","|"). excelappl:worksheets:ITEM(i-item):SELECT. excelappl:worksheets:ITEM(i-item):NAME = c-sheet.
Visualizar arquivo Excel
excelappl:VISIBLE = FALSE.
excelappl:VISIBLE = TRUE.
Se True, o Excel é aberto e montado para visualização do usuário. Recomendável deixar false durante a execução do programa e no final repetir o comando, porém com TRUE. Isso deixa o programa mais rápido e evita um problema que pode acontecer caso o usuário selecione uma célula enquanto o progress monta o arquivo.
Ocultar/mostrar linhas de grade
excelappl:ActiveWindow:DisplayGridlines = False. (ou true)
obs.: não confundir linhas do arquivo com impressão de linhas de grade. Para Impressão, vide configuração de páginas.
Zoom do arquivo (visualização)
excelappl:ActiveWindow:Zoom = 65. /* 65 é o percentual desejado */
Configurações da página (para impressão)
Obs.: alterar as configurações somente quando necessário, se não informado, o arquivo utiliza as configurações padrão do Excel.
Orientação da página
chWorkSheet:PageSetup:Orientation = 1. /* Portrait (retrato) */
chWorkSheet:PageSetup:Orientation = 2. /* Landscape (paisagem) */
Zoom da página (Impressão)
chWorkSheet:PageSetup:Zoom = 75. /* 75 é o percentual desejado */
Não confundir com o zoom do arquivo, esse zoom é o ajuste para X % do tamanho normal na configuração da página
Ajustar página por X de Altura e Y de Largura (Impressão)
chWorkSheet:PageSetup:Zoom = FALSE. /* a zoom tem que ser desativado para funcionar */
chWorkSheet:PageSetup:FitToPagesWide = 1.
chWorkSheet:PageSetup:FitToPagesTall = 1000.
Tipo/tamanho do Papel
chWorkSheet: PageSetup:PaperSize = “tipo do papel desejado”.
Qualidade de impressão
chWorkSheet: PageSetup:PrintQuality = 600.
Número da primeira página
chWorkSheet: PageSetup:FirstPageNumber = 3.
Margens
Obs.: a medida é em “inches”, é necessário converter para centímetros. Exemplo : 15 = 0.5 cm
chWorkSheet:PageSetup:LeftMargin = 15. /* Margem esquerda */ chWorkSheet:PageSetup:RightMargin = 15. /* Margem direita */ chWorkSheet:PageSetup:TopMargin = 15. /* Margem superior */ chWorkSheet:PageSetup:BottomMargin = 15. /* Margem inferior */ chWorkSheet:PageSetup:HeaderMargin = 0. /* Margem cabeçalho */ chWorkSheet:PageSetup:FooterMargin = 0. /* Margem rodapé */
Centralizar página
chWorkSheet:PageSetup:CenterHorizontally = True. (ou False)
chWorkSheet:PageSetup:CenterVertically = True. (ou False)
Cabeçalho e rodapé
chWorkSheet:PageSetup:CenterHeader = “Titulo do Relatorio”. /* cabeçalho */
/* rodapé */
chWorkSheet:PageSetup:LeftFooter = “OBS.: ” + FILL(“_”,60) + CHR(10) + FILL(“_”,66) + CHR(10) +
CHR(10) + “____________________” + CHR(10) + ” ASS. GESTOR”.
chWorkSheet:PageSetup:CenterFooter = CHR(10) + CHR(10) + “_____ / _____ / ________” + CHR(10)
+ “Data do Visto”.
chWorkSheet:PageSetup:RightFooter = CHR(10) + CHR(10) + “PAGINA: ” + “&P/&N”.
Área de Impressão
chWorkSheet:PageSetup:PrintArea = “$A$1:$J$45”. /* marca a área de impressão da célula A1 até a J45
Imprimir títulos
chWorkSheet:PageSetup:printTitleRows = “$1:$7″. /* repete o range de linhas de 1 a 7 na impressão de todas as páginas */
chWorkSheet:PageSetup:printTitleColumns = ” $A:$B”. /* repete o range de colunas de A a B na impressão de todas as páginas */
Imprimir Linhas de Grade
chWorkSheet:PageSetup:PrintGridlines = False. Ou True
Obs.: esse comando funciona apenas para impressão. Para visualizar linhas de grade no arquivo, vide “Ocultar/mostrar linhas de grade”
Imprimir Preto e Branco
chWorkSheet:PageSetup:BlackAndWhite = False. Ou True
Imprimir Qualidade Rascunho
chWorkSheet:PageSetup:Draft = False. Ou True
Inserindo informações e configurando células
Inserir informação em uma célula (comando + usado)
excelappl:range(“A1”):VALUE = “Item”.
excelappl:range(“B1”):VALUE = item.it-codigo.
Controlar células por variáveis
excelappl:range(“A” + STRING(i-linha, “999999”) ):VALUE = item.it-codigo.
excelappl:range(“P” + STRING(i-linha, “99999999”)):VALUE = d-valor-total – d-val-adto.
excelappl:range(“A” + STRING(i-linha, “99999999”)):VALUE = “codigo “ + string(emitente.cod-emitente).
Obs.: cada célula recebe apenas um tipo de dado. Ou é caracter, ou inteiro, ou decimal, e assim por diante.
Caso queira colocar uma string + um valor, é necessário tranformar o valor em string como no último exemplo.
As colunas também podem ser controladas por variáveis, uma forma fácil de fazer isso é criar uma variável extent e controlar as colunas por números.
DEF VAR i-coluna AS INTEGER NO-UNDO.
DEF VAR c-coluna AS CHAR EXTENT 256 NO-UNDO
INITIAL [“A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”,”I”,”J”,”K”,”L”,”M”,”N”,”O”,”P”,”Q”,”R”,”S”,”T”,”U”,”V”,”W”,”X”,”Y”,”Z”,”AA”,”AB”,”AC”,”AD”,”AE”,”AF”,”AG”,”AH”,”AI”,”AJ”,”AK”,”AL”,”AM”,”AN”,”AO”,”AP”,”AQ”,”AR”,”AS”,”AT”,”AU”,”AV”,”AW”,”AX”,”AY”,”AZ”,”BA”,”BB”,”BC”,”BD”,”BE”,”BF”,”BG”,”BH”,”BI”,”BJ”,”BK”,”BL”,”BM”,”BN”,”BO”,”BP”,”BQ”,”BR”,”BS”,”BT”,”BU”,”BV”,”BW”,”BX”,”BY”,”BZ”,”CA”,”CB”,”CC”,”CD”,”CE”,”CF”,”CG”,”CH”,”CI”,”CJ”,”CK”,”CL”,”CM”,”CN”,”CO”,”CP”,”CQ”,”CR”,”CS”,”CT”,”CU”,”CV”,”CW”,”CX”,”CY”,”CZ”,”DA”,”DB”,”DC”,”DD”,”DE”,”DF”,”DG”,”DH”,”DI”,”DJ”,”DK”,”DL”,”DM”,”DN”,”DO”,”DP”,”DQ”,”DR”,”DS”,”DT”,”DU”,”DV”,”DW”,”DX”,”DY”,”DZ”,”EA”,”EB”,”EC”,”ED”,”EE”,”EF”,”EG”,”EH”,”EI”,”EJ”,”EK”,”EL”,”EM”,”EN”,”EO”,”EP”,”EQ”,”ER”,”ES”,”ET”,”EU”,”EV”,”EW”,”EX”,”EY”,”EZ”,”FA”,”FB”,”FC”,”FD”,”FE”,”FF”,”FG”,”FH”,”FI”,”FJ”,”FK”,”FL”,”FM”,”FN”,”FO”,”FP”,”FQ”,”FR”,”FS”,”FT”,”FU”,”FV”,”FW”,”FX”,”FY”,”FZ”,”GA”,”GB”,”GC”,”GD”,”GE”,”GF”,”GG”,”GH”,”GI”,”GJ”,”GK”,”GL”,”GM”,”GN”,”GO”,”GP”,”GQ”,”GR”,”GS”,”GT”,”GU”,”GV”,”GW”,”GX”,”GY”,”GZ”,”HA”,”HB”,”HC”,”HD”,”HE”,”HF”,”HG”,”HH”,”HI”,”HJ”,”HK”,”HL”,”HM”,”HN”,”HO”,”HP”,”HQ”,”HR”,”HS”,”HT”,”HU”,”HV”,”HW”,”HX”,”HY”,”HZ”,”IA”,”IB”,”IC”,”ID”,”IE”,”IF”,”IG”,”IH”,”II”,”IJ”,”IK”,”IL”,”IM”,”IN”,”IO”,”IP”,”IQ”,”IR”,”IS”,”IT”,”IU”,”IV”].
O número máximo de colunas é 256.
Assign i-coluna = 5. /* corresponde a coluna E */
excelappl:range(STRING(c-coluna[i-coluna]) + STRING(i-linha, “99999999”)):VALUE = item.desc-item.
Com isso é também possível controlar as colunas por números.
Inserir Cálculo / Fórmula
excelappl:range(“B20”):VALUE = “=SUM(B2:B19)”.
excelappl:range(“B” + STRING(i-linha, “999999”)):VALUE = “=SUM(B” + STRING(i-linha-aux, “999999”) + “:B” + STRING(i-linha – 2, “999999”) + “)”.
excelappl:range(“B” + STRING(i-linha, “999999”):FormulaR1C1 = “=SUM(R[-” + string(i-conta) + “]C:R[-1]C)”.
Obs.: comando SUM é o somatório, se precisar de outras fórmulas, vide nome no excel
O cálculo também pode ser manual:
excelappl:range(“B” + STRING(i-linha, “999999”)):VALUE = “=B12+C12+E12”.
Manipulação de números (Configurar Separador Decimal e Separador de milhar)
excelappl:DecimalSeparator = “,”.
excelappl:ThousandsSeparator = “.”.
excelappl:UseSystemSeparators = FALSE.
Muito útil quando o relatório pode ser gerado em Excel instalado em Português e Inglês (dependendo do usuário). Essa opção funciona apenas no Office 2003 ou posterior, os outros não possuem essa opção que fica em Ferramentas / Opções / Internacional.
Dependendo da linguagem, os números saem distorcidos. Segue abaixo dica para correção:
DEF VAR c-DecimalSeparator AS CHAR NO-UNDO.
DEF VAR c-ThousandsSeparator AS CHAR NO-UNDO.
DEF VAR l-UseSystemSeparators AS LOGICAL NO-UNDO.
No começo do programa.
ASSIGN c-DecimalSeparator = excelappl:DecimalSeparator
c-ThousandsSeparator = excelappl:ThousandsSeparator
l-UseSystemSeparators = excelappl:UseSystemSeparators.
excelappl:DecimalSeparator = “,”.
excelappl:ThousandsSeparator = “.”.
excelappl:UseSystemSeparators = FALSE.
/* imprimir valores desejados aqui */
No final do programa.
excelappl:DecimalSeparator = c-DecimalSeparator.
excelappl:ThousandsSeparator = c-ThousandsSeparator.
excelappl:UseSystemSeparators = l-UseSystemSeparators.
Trocando formato da célula
excelappl:range(“B1”):numberformat = “#.##0”.
excelappl:range(“B1”):numberformat = “#.##0,00”.
excelappl:range(“B1”):numberformat = “@”. /* texto */
IMPORTANTE: Colocar os formatos antes dos valores nas células, principalmente campos texto “@”
Verificar outros formatos do excel como data, hora, etc (exatamente como aparece na macro).
Alterando tamanho da coluna
excelappl:COLUMNS(“A:A”):ColumnWidth = 15.00. /* 1 coluna */
excelappl:COLUMNS(“B:J”):ColumnWidth = 12.00. /* N colunas */
ou
excelappl:COLUMNS(“B:J”):SELECT.
excelappl:SELECTION:ColumnWidth = 12.00.
Alterando tamanho da linha
excelappl:Rows(“1:1”):RowHeight = 20.5. /* 1 linha */
excelappl:Rows(“1:15”):RowHeight = 20.5. /* N linhas
Inserindo Linhas
excelappl:range(“15:15”):INSERT()
ou
excelappl:range(string(i-linha, “9999”) + “:” + string(i-linha, “9999”)):INSERT().
Mesclar células
excelappl:range(“A1:J10):SELECT.
excelappl:SELECTION:merge.
OBS.: Selecionar o range primeiro e fazer o merge depois
Ou fazer direto.
excelappl:range(“A” + STRING(i-linha) + “:D” + STRING(i-linha)):Merge.
excelappl:range(“A” + STRING(i-linha) + “:D” + STRING(i-linha + 10)):Merge.
“Desmesclar” células
excelappl:range(“B” + STRING(i-linha, “999999”)):SELECT.
excelappl:SELECTION:UNMERGE.
Reduzir tamanho da letra automaticamente para caber na célula
excelappl:range(“A” + STRING(i-linha, “99999999”)):ShrinkToFit = TRUE.
Quebrar texto automaticamente para caber na célula
excelappl:range(“A” + STRING(i-linha, “99999999”)): WrapText = TRUE.
Orientação do Texto dentro da célula
excelappl:range(“A” + STRING(i-linha, “99999999”)): Orientation = 0. /* horizontal */
excelappl:range(“A” + STRING(i-linha, “99999999”)): Orientation = 90. /* vertical */
O valor varia de -90 a 90 (graus)
Alinhamento do valor dentro da célula
excelappl:range(“A1”):HorizontalAlignment = 3.
3 é o código do alinhamento (centralizado, por exemplo). Caso queira outro, trocar o número para alinhar a direita, esquerda, etc.
Para horizontal, os códigos são:
HorizontalAlignment = 1. /* Geral */
HorizontalAlignment = 2. /* Esquerda (recuo) */
HorizontalAlignment = 3. /* Centralizado */
HorizontalAlignment = 4. /* Direita (recuo) */
HorizontalAlignment = 5. /* Preencher */
HorizontalAlignment = 6. /* Justificar */
HorizontalAlignment = 7. /* Centralizar Seleção */
Para vertical, os códigos são:
VerticalAlignment = 1 /* Superior */
VerticalAlignment = 2 /* Centralizado */
VerticalAlignment = 3 /* Inferior */
VerticalAlignment = 4 /* Justificado */
VerticalAlignment = 5 /* Distribuído */
Alinhamento de um range de células
excelappl:COLUMNS(“F:O”):SELECT.
excelappl:SELECTION:HorizontalAlignment = 3.
Ou
excelappl:range(“A” + STRING(i-linha) + “:D” + STRING(i-linha)):HorizontalAlignment = 3.
Selecionar células
1 célula
excelappl:range(“A1”):SELECT.
N células
excelappl:COLUMNS(“F:O”):SELECT.
ou
excelappl:ROWS(“2:15”):SELECT.
ou
excelappl:range(“A” + STRING(i-linha) + “:D” + STRING(i-linha)): SELECT.
Trocar Fonte
excelappl:range(“A1”):FONT:NAME = “nome-da-fonte”.
excelappl:range(“A1”):FONT:BOLD = TRUE. /* negrito */
excelappl:range(“A1”):FONT:ITALIC = TRUE.
excelappl:range(“A1”):FONT:UNDERLINE = TRUE. /* Sublinhado */
excelappl:range(“A1”):FONT:SIZE = 12.
excelappl:range(“A1”):Style = “comma” /* style = aplica um tipo de fonte na célula.
excelappl:range(“A1”):font:colorindex = 2. /* vide tabela de cores abaixo */
obs.: O range pode ser substituído por controle de variáveis como exemplo abaixo:
excelappl:range(STRING(c-coluna[1]) + STRING(i-linha, “99999999”) + “:” + STRING(c-coluna[4]) + STRING((i-linha + 5), “99999999”)):FONT:size = 12.
Trocar cor da célula
excelappl:range(“A1”):interior:colorindex = 10. /* 10 é o código da cor. */
Tabela de cores
Vide tabela de cores mais usadas (precisando de outra cor, tem que testar):
01 preto
02 branco
03 vermelho
04 verde limão
05 azul
06 amarelo
07 rosa
08 azul claro
09 marron
10 verde abacate
11 azul marinho
12 terra
13 margenta
14 verde
15 cinza claro
16 cinza
17 azul marinho claro
18 roxo
19 amarelo claro
20 azul claro
21 cor de uva
22 vermelho claro
23 azul celeste
24 roxo claro
25 azul marinho
26 rosa
27 amarelo
28 azul
34 azul clarinho
44 laranja claro
45 laranja meio claro
46 laranja escuro
O valor máximo é 55.
Padrões (Sombreamento de célula)
excelappl:range(“P” + STRING(i-linha)):interior:Pattern = 9.
9 é um dos padrões, verificar os outros no Excel.
Congelar painéis
excelappl:range(“A” + STRING(i-linha, “99999999”)):SELECT. /* precisa selecionar as células primeiro */
excelappl:ActiveWindow:FreezePanes = True.
Autofiltro
excelappl:range(“A” + STRING(i-linha, “99999999”)):SELECT. /* precisa selecionar as células primeiro */
excelappl:range(“A” + STRING(i-linha, “99999999”)):autofilter(,,,).
Autoajuste de células
excelappl:Cells:SELECT. /* precisa selecionar todas primeiro */
excelappl:Cells:EntireColumn:AutoFit.
Esse comando simula a ação de clicar no quadrado superior esquerdo entre as linhas e colunas (SELECT) e dar um duplo clique em uma das divisões de células para autoajuste (AUTOFIT)
Inserir Bordas
– Borda ao redor de uma seleção
excelappl:range(“A6:A8”):borderaround(1,,48).
excelappl:range(“A14:B18”):borderaround(1,3,1).
Onde (1,3,1) segue a seguinte regra:
1 – Estilo da Linha (LineStyle)
3 – Grossura da linha (Weight)
1 – Cor da linha (ColorIndex)
– Bordas individuais
excelappl:Range(“b10:d10”):Borders(8):LineStyle = 12.
excelappl:Range(“d10:d20”):Borders(2):LineStyle = 10.
excelappl:Range(“b20:d20”):Borders(4):LineStyle = 12.
excelappl:Range(“b10:b20”):Borders(1):LineStyle = 12.
excelappl:Range(“A” + string(i-linha)):Borders(8):Weight = 3.
excelappl:Range(“A” + string(i-linha)):Borders(2):Weight = 2.
excelappl:Range(“A” + string(i-linha)):Borders(4):Weight = 2.
excelappl:Range(“A” + string(i-linha)):Borders(1):Weight = 3.
Obs.: varia de 1 a 4
excelappl:Range(“b10:d10”):Borders(8):ColorIndex = 1.
excelappl:Range(“d10:d20”):Borders(2):ColorIndex = 1.
excelappl:Range(“b20:d20”):Borders(4):ColorIndex = 2.
excelappl:Range(“b10:b20”):Borders(1):ColorIndex = 2.
Código para Borders
01 coluna esquerda
02 coluna direita
03 linha inferior
04 linha inferior
05 descendo direita
06 subindo direita
07 nada
08 linha superior
Inserir Figura, Desenho
chworkSheet:Pictures:Insert(“C:\temp\windows.jpg”):Select
Quebra de Página
Para inserir uma quebrar pagina no Excel.
1a forma:
chWorksheet:HPageBreaks:Add(chWorksheet:Range(“A45”)). /* Horizontal */
chWorksheet:VPageBreaks:Add(chWorksheet:Range(“L1”)). /* Vertical */
obs.: não é necessário utilizar os dois, pode-se usar apenas um de acordo com a necessidade.
Lembrando que a quebra pode ser em uma célula variável, nesse caso fica assim:
chWorkSheet:HPageBreaks:Add(chWorksheet:Range("A" + STRING(i-linha))). /* onde i-linha é a variável de controle */ 2a forma: chBreakLine = chWorkSheet:Rows(STRING(i-linha)). /* Horizontal */ chBreakLine = chWorkSheet:COLUMNS("20"). /* Vertical */ chWorkSheet:HPageBreaks:Add(chBreakLine). IMPORTANTE: A quebra de página não funciona se os tamanhos de altura e largura da página forem especificados como modelo abaixo: chWorkSheet:PageSetup:Zoom = FALSE. chWorkSheet:PageSetup:FitToPagesWide = 1. chWorkSheet:PageSetup:FitToPagesTall = 10. PARA FUNCIONAR, O ZOOM NÃO PODE ESTAR DESABILITADO. chWorkSheet:PageSetup:Zoom = 100. /* PODE SER OUTRO VALOR, 70 POR EXEMPLO */
Manipulação do arquivo
Mostrar mensagens de Alerta (confirmação para salvar ou imprimir arquivos)
excelappl:APPLICATION:DisplayAlerts = FALSE. (ou TRUE)
Esse comando é importante para controlar as mensagens do Excel. Por exemplo, para imprimir ou salvar um arquivo onde você não queira que aparece as mensagens de confirmação, basta deixar o parâmetro como FALSE. Sugiro colocar sempre.
Salvar arquivos
excelappl:Workbooks:Item(1):SaveAs(“c:\temp\teste.xls”,,,,,,).
Cada vírgula representa um parâmetro:
Os parâmetros do SaveAs são:
1 – Nome do arquivo
2 – Formato do arquivo (opcional)
3 – Senha (opcional)
4 – Senha para Escrita (opcional)
5 – Somente leitura (True or false) (opcional)
6 – Criar Backup (True or false) (opcional)
Obs.: é comum usar apenas o Nome do arquivo conforme exemplo acima.
Visualizar a impressão
excelappl:VISIBLE = TRUE. /* para funcionar a planilha tem que estar visível */
excelappl:ActiveWindow:SelectedSheets:PrintPreview.
Imprimir arquivos
excelappl:ActiveWindow:SelectedSheets:Printout.
Ou passando parâmetros:
Excelappl:ActiveWindow:SelectedSheets:PrintOut(1,true)
Onde: Copies:=1, Collate:=True
Verificar outros parâmetros do Excel caso necessário.
Obs.: para a impressão, sugiro deixar a planilha com “visible” = false e DisplayAlerts = False conforme modelo abaixo e sempre selecionar as planilhas a serem impressas antes de executar o comando.
excelappl:worksheets:ITEM(1):SELECT. /* selecionar a(s) planilha(s) a ser(em) impressa(s) */
excelappl:VISIBLE = FALSE.
excelappl:ActiveWindow:SelectedSheets:Printout.
excelappl:APPLICATION:DISPLAYALERTS = FALSE.
Obs2.: Imprime a planilha na impressora padrão do Windows.
Nota Importante: Verificar se a versão do Excel utilizada possui o comando desejado. Por exemplo, a configuração de campo para Separador Decimal não existe no Excel 2000, portanto o comando não vai funcionar.
Dica muito importante:
Todos os comandos podem ser obtidos através do próprio Excel através de Macro.
Para isso, basta abrir o Excel, escolher a opção FERRAMENTAS / MACRO / GRAVAR NOVA MACRO. (Anote o nome da Macro) e não fechar a macro – (parar gravação – quadrado / stop) na janelinha de parâmetro da Macro, até executar as tarefas necessárias.
Com essa janela da macro aberta, realizar todas as alterações desejadas, como configuração de célula, configuração de página, utilização dos botões do Excel, etc.
Depois de terminado, parar a macro (quadradinho da janela da macro).
Escolher a opção FERRAMENTAS / MACRO / MACRO (alt + F8), selecionar a macro criada e clicar no botão Editar. Verificar o código gerado e adaptar com os comandos progress.
Caso o comando não seja exatamente igual, é possível ver a sintaxe do comando no progress através do Pro Tool (componente Progress COM Object Viewer – Lupa com setinhas vermelhas)
Abrir o componente do Excel conforme modelo abaixo:
Note a sintaxe do comando RANGE do Progress:
<com-handle> é a variável definida no seu programa
Value é o comando desejado
= <anytype>-var é o valor que deseja colocar na célula
Exemplo prático:
excelappl:range(“A1”):VALUE = d-valor.
Segue abaixo modelo simples de utilização do Progress x Excel.
/******************************************************************************\ ** Exemplo de programa de impressão Progress x Excel ** ** Marcio Sacramoni ** ** marcio@kconsulting.com.br ** \******************************************************************************/ /* Obs.: os comandos de formatação de célula são opcionais, se não informados, vão respeitar os padrões do Excel. Valido para toda a formatação: bordas, cores, tamanhos (de letra, linhas, colunas), tipo de valor (texto, numérico), zoom de pagina, alinhamento, etc */ DEF VAR excelappl AS COM-HANDLE NO-UNDO. DEF VAR ChWorkSheet AS COM-HANDLE NO-UNDO. DEF VAR i-linha AS INTE NO-UNDO. DEF VAR c-modelo AS CHAR NO-UNDO. DEF VAR l-imprime AS LOGICAL INIT NO NO-UNDO. DEF VAR i-coluna AS INTEGER NO-UNDO. DEF VAR c-coluna AS CHAR EXTENT 256 NO-UNDO INITIAL ["A","B","C","D","E","F","G","H","I","J","K","L","M", "N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM", "AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ", "BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM", "BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ", "CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM", "CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ", "DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM", "DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ", "EA","EB","EC","ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM", "EN","EO","EP","EQ","ER","ES","ET","EU","EV","EW","EX","EY","EZ", "FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ","FK","FL","FM", "FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ", "GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM", "GN","GO","GP","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ", "HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ","HK","HL","HM", "HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX","HY","HZ", "IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL","IM", "IN","IO","IP","IQ","IR","IS","IT","IU","IV"]. CREATE "excel.application" excelappl. excelappl:workbooks:ADD(). /* Caso queira abrir um modelo, descomentar o trecho abaixo e comentar o ADD() acima assign c-modelo = "c:\temp\modelo.xlt". excelappl:workbooks:ADD(c-modelo). */ /* o numero 1 dentro do comando ITEM é a pasta a ser selecionada, caso queira a segunda planilha, informar ITEM(2), ou ainda ITEM(i-pasta) onde i-pasta é uma variável inteira utilizada para controle. */ excelappl:worksheets:ITEM(1):SELECT. chWorkSheet = excelappl:Sheets:Item(1). excelappl:VISIBLE = FALSE. /* Pode ser true, o excel será aberto durante a montagem. Cuidado para nao clicar em nenhuma célula ate o final do processamento, pois o ponteiro se perde */ excelappl:worksheets:ITEM(1):NAME = 'RD' NO-ERROR. excelappl:ActiveWindow:DisplayGridlines = False. excelappl:ActiveWindow:Zoom = 75. /* zoom do arquivo, não confundir com % de zoom da impressão */ chWorkSheet:PageSetup:RightFooter = "PAGINA: " + "&P/&N". /* chWorkSheet:PageSetup:Zoom = 60. */ /* ajusta a impressão para 60 do tamanho */ /* chWorkSheet:PageSetup:FitToPagesWide = 1. */ /* chWorkSheet:PageSetup:FitToPagesTall = i-pagina. */ excelappl:range("A1"):SELECT. ASSIGN i-linha = 1. excelappl:Rows(STRING(i-linha, "99999999") + ":" + STRING(i-linha, "99999999")):RowHeight = 20. excelappl:range("A" + STRING(i-linha) + ":C" + STRING(i-linha)):Merge. excelappl:range("A" + STRING(i-linha)):HorizontalAlignment = 3. /* Centralizado */ excelappl:range("A" + STRING(i-linha)):FONT:size = 16. excelappl:range("A" + STRING(i-linha, "99999999")):Font:Bold = TRUE. excelappl:range("A" + STRING(i-linha) + ":C" + STRING(i-linha)):borderaround(1,2,1). excelappl:range("A" + STRING(i-linha)):VALUE = "Teste de Impressao". ASSIGN i-linha = i-linha + 1. excelappl:range("A" + STRING(i-linha) + ":C" + STRING(i-linha)):interior:colorindex = 15. excelappl:COLUMNS("A:A"):ColumnWidth = 17.00. excelappl:COLUMNS("B:B"):ColumnWidth = 40.00. excelappl:range("A" + STRING(i-linha)):VALUE = "Item". excelappl:range("B" + STRING(i-linha)):VALUE = "Descricao". /* a coluna também pode ser controlada por variáveis */ excelappl:range(STRING(c-coluna[3]) + STRING(i-linha)):VALUE = "Peso". ASSIGN i-linha = i-linha + 1. FOR EACH ITEM NO-LOCK: excelappl:range("A" + STRING(i-linha)):numberformat = "@". /* transforma em texto */ excelappl:range("A" + STRING(i-linha)):VALUE = ITEM.it-codigo. excelappl:range("B" + STRING(i-linha)):numberformat = "@". /* transforma em texto */ excelappl:range("B" + STRING(i-linha)):VALUE = ITEM.desc-item. excelappl:range("B" + STRING(i-linha, "99999999")):ShrinkToFit = TRUE. /* ajusta o conteudo para caber na célula. Tem que vir depois da inserção do valor. */ excelappl:range("C" + STRING(i-linha)):numberformat = "#.##0,00". excelappl:range("C" + STRING(i-linha)):HorizontalAlignment = 4. /* Direita */ excelappl:range("C" + STRING(i-linha)):VALUE = ITEM.peso-liquido. excelappl:range("A" + STRING(i-linha) + ":A" + STRING(i-linha)):borderaround(1,2,1). excelappl:range("B" + STRING(i-linha) + ":B" + STRING(i-linha)):borderaround(1,2,1). excelappl:range("C" + STRING(i-linha) + ":C" + STRING(i-linha)):borderaround(1,2,1). ASSIGN i-linha = i-linha + 1. IF i-linha > 20 THEN LEAVE. /* só para não ficar muito grande */ END. ASSIGN i-linha = i-linha + 1. excelappl:range("B" + STRING(i-linha)):VALUE = "Peso Total". excelappl:range("C" + STRING(i-linha)):numberformat = "#.##0,00". excelappl:range("B" + STRING(i-linha)):HorizontalAlignment = 4. /* Direita */ excelappl:range("C" + STRING(i-linha)):HorizontalAlignment = 4. /* Direita */ excelappl:range("C" + STRING(i-linha)):Font:Bold = TRUE. excelappl:range("C" + STRING(i-linha)):VALUE = "=SUM(C3:C" + STRING(i-linha - 1, "999999") + ")". excelappl:range("A" + STRING(i-linha) + ":C" + STRING(i-linha)):borderaround(1,2,1). excelappl:worksheets:ITEM(1):SELECT. excelappl:range("A1"):SELECT. /* chWorkSheet:PageSetup:Zoom = FALSE. */ /* chWorkSheet:PageSetup:FitToPagesWide = 1. */ /* chWorkSheet:PageSetup:FitToPagesTall = 10. */ IF l-imprime = YES THEN DO: excelappl:VISIBLE = FALSE. excelappl:ActiveWindow:SelectedSheets:Printout. excelappl:APPLICATION:DISPLAYALERTS = FALSE. excelappl:QUIT(). /* somente utilizar o commando quit caso não queira visualizar o arquivo na tela */ END. ELSE excelappl:VISIBLE = TRUE. RELEASE OBJECT excelappl NO-ERROR. RELEASE OBJECT chWorksheet NO-ERROR.
O Sacramoni manja muito!
Show de bola.
Legal!!! Muito bom mesmo!
Excelente conteúdo, muito bem explicado para nós que estamos iniciando.
Não temos muito conteúdo dessa linguagem na internet.
Aproveitando uma sugestão, seria legal algo sobre como criar uma tela gráfica simples com alguns campos, e passar os parâmetros para o rp.p.
Agradeço
Eduardo
Muito obrigado Eduardo,
Estou preparando mais conteúdo para o site, sobre a tela gráfica costumo usar os template do appBuilder mas posso ver algo sim.
Boa noite. Bom mesmo. Obrigado por compartilhar conhecimento.