Você está na página 1de 16

Criando aplicao entre Progress e Excel e configurando planilha

Criando variveis COM-HANDLE para interao do Progress com o Excel DEF VAR excelappl AS COM-HANDLE NO-UNDO. DEF VAR ChWorkSheet AS COM-HANDLE NO-UNDO. Criando a aplicao 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 varivel deve ter o contedo completo do arquivo, ou seja, diretrio + nome do arquivo (usar sempre arquivo .xlt -> modelo) Fechando o Excel excelappl:quit(). Usar apenas quando quiser fechar o excel, como por exemplo aps uma impresso. Se quiser que o arquivo fique aberto para consulta ou para salv-lo manualmente, no utilizar esse comando. Esse comando fecha a planilha excel mas no libera o handle da aplicao, vide nota abaixo. Liberando o Handle ao final da execuo (muito importante, inserir esse comando sempre ao final do programa, pois mesmo se o Excel fechado pelo usurio, a handle fica na memria.) RELEASE OBJECT excelappl NO-ERROR. RELEASE OBJECT chWorksheet NO-ERROR. Repetir o Release para todas as variveis com-handle. Selecionar pastas excelappl:worksheets:ITEM(1):SELECT. O nmero 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 informaes em outras planilhas, necessrio selecionar a planilha desejada conforme tpico 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 varivel 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). No esquecer de selecionar a pasta primeiro. A varivel i-item a pasta a ser renomeada, que pode receber uma constante ou o valor de uma varivel lembrando que no podem ser utilizados caracteres especiais como /, *, [, ]. Sugiro criar uma varivel 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 visualizao do usurio. Recomendvel deixar false durante a execuo do programa e no final repetir o comando, porm com TRUE. Isso deixa o programa mais rpido e evita um problema que pode acontecer caso o usurio selecione uma clula enquanto o progress monta o arquivo. Ocultar/mostrar linhas de grade excelappl:ActiveWindow:DisplayGridlines = False. (ou true) obs.: no confundir linhas do arquivo com impresso de linhas de grade. Para Impresso, vide configurao de pginas. Zoom do arquivo (visualizao) excelappl:ActiveWindow:Zoom = 65. /* 65 o percentual desejado */

Configuraes da pgina (para impresso)

Obs.: alterar as configuraes somente quando necessrio, se no informado, o arquivo utiliza as configuraes padro do Excel.
Orientao da pgina chWorkSheet:PageSetup:Orientation = 1. /* Portrait (retrato) */ chWorkSheet:PageSetup:Orientation = 2. /* Landscape (paisagem) */ Zoom da pgina (Impresso) chWorkSheet:PageSetup:Zoom = 75. /* 75 o percentual desejado */ No confundir com o zoom do arquivo, esse zoom o ajuste para X % do tamanho normal na configurao da pgina Ajustar pgina por X de Altura e Y de Largura (Impresso) 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 impresso chWorkSheet: PageSetup:PrintQuality = 600. Nmero da primeira pgina chWorkSheet: PageSetup:FirstPageNumber = 3. Margens Obs.: a medida em inches, necessrio converter para centmetros. Exemplo : 15 = 0.5 cm chWorkSheet:PageSetup:LeftMargin chWorkSheet:PageSetup:RightMargin chWorkSheet:PageSetup:TopMargin chWorkSheet:PageSetup:BottomMargin chWorkSheet:PageSetup:HeaderMargin chWorkSheet:PageSetup:FooterMargin Centralizar pgina chWorkSheet:PageSetup:CenterHorizontally = True. (ou False) chWorkSheet:PageSetup:CenterVertically = True. (ou False) Cabealho e rodap chWorkSheet:PageSetup:CenterHeader = Titulo do Relatorio. /* cabealho */ /* 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 Impresso chWorkSheet:PageSetup:PrintArea = "$A$1:$J$45". /* marca a rea de impresso da clula A1 at a J45 = = = = = = 15. 15. 15. 15. 0. 0. /* /* /* /* /* /* Margem Margem Margem Margem Margem Margem esquerda */ direita */ superior */ inferior */ cabealho */ rodap */

Imprimir ttulos chWorkSheet:PageSetup:printTitleRows = "$1:$7". /* repete o range de linhas de 1 a 7 na impresso de todas as pginas */ chWorkSheet:PageSetup:printTitleColumns = " $A:$B". /* repete o range de colunas de A a B na impresso de todas as pginas */ Imprimir Linhas de Grade chWorkSheet:PageSetup:PrintGridlines = False. Ou True Obs.: esse comando funciona apenas para impresso. 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 informaes e configurando clulas


Inserir informao em uma clula (comando + usado) excelappl:range("A1"):VALUE = Item. excelappl:range("B1"):VALUE = item.it-codigo. Controlar clulas por variveis 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 clula recebe apenas um tipo de dado. Ou caracter, ou inteiro, ou decimal, e assim por diante. Caso queira colocar uma string + um valor, necessrio tranformar o valor em string como no ltimo exemplo. As colunas tambm podem ser controladas por variveis, uma forma fcil de fazer isso criar uma varivel extent e controlar as colunas por nmeros. 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","C Z","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","G D","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 nmero mximo 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 tambm possvel controlar as colunas por nmeros. Inserir Clculo / Frmula 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 somatrio, se precisar de outras frmulas, vide nome no excel O clculo tambm pode ser manual: excelappl:range("B" + STRING(i-linha, "999999")):VALUE = "=B12+C12+E12". Manipulao de nmeros (Configurar Separador Decimal e Separador de milhar) excelappl:DecimalSeparator = ",". excelappl:ThousandsSeparator = ".". excelappl:UseSystemSeparators = FALSE. Muito til quando o relatrio pode ser gerado em Excel instalado em Portugus e Ingls (dependendo do usurio). Essa opo funciona apenas no Office 2003 ou posterior, os outros no possuem essa opo que fica em Ferramentas / Opes / Internacional. Dependendo da linguagem, os nmeros saem distorcidos. Segue abaixo dica para correo: DEF VAR c-DecimalSeparator DEF VAR c-ThousandsSeparator DEF VAR l-UseSystemSeparators No comeo do programa. ASSIGN c-DecimalSeparator c-ThousandsSeparator l-UseSystemSeparators AS CHAR AS CHAR AS LOGICAL = excelappl:DecimalSeparator = excelappl:ThousandsSeparator = excelappl:UseSystemSeparators. NO-UNDO. NO-UNDO. NO-UNDO.

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 clula excelappl:range("B1"):numberformat = "#.##0".

excelappl:range("B1"):numberformat = "#.##0,00". excelappl:range("B1"):numberformat = "@". /* texto */ IMPORTANTE: Colocar os formatos antes dos valores nas clulas, 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 clulas 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 clulas excelappl:range("B" + STRING(i-linha, "999999")):SELECT. excelappl:SELECTION:UNMERGE. Reduzir tamanho da letra automaticamente para caber na clula excelappl:range("A" + STRING(i-linha, "99999999")):ShrinkToFit = TRUE. Quebrar texto automaticamente para caber na clula excelappl:range("A" + STRING(i-linha, "99999999")): WrapText = TRUE. Orientao do Texto dentro da clula 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 clula excelappl:range("A1"):HorizontalAlignment = 3.

3 o cdigo do alinhamento (centralizado, por exemplo). Caso queira outro, trocar o nmero para alinhar a direita, esquerda, etc. Para horizontal, os cdigos so: HorizontalAlignment = 1. /* Geral */ HorizontalAlignment = 2. /* Esquerda (recuo) */ HorizontalAlignment = 3. /* Centralizado */ HorizontalAlignment = 4. /* Direita (recuo) */ HorizontalAlignment = 5. /* Preencher */ HorizontalAlignment = 6. /* Justificar */ HorizontalAlignment = 7. /* Centralizar Seleo */ Para vertical, os cdigos so: VerticalAlignment = 1 /* Superior */ VerticalAlignment = 2 /* Centralizado */ VerticalAlignment = 3 /* Inferior */ VerticalAlignment = 4 /* Justificado */ VerticalAlignment = 5 /* Distribudo */ Alinhamento de um range de clulas excelappl:COLUMNS("F:O"):SELECT. excelappl:SELECTION:HorizontalAlignment = 3. Ou excelappl:range("A" + STRING(i-linha) + ":D" + STRING(i-linha)):HorizontalAlignment = 3. Selecionar clulas 1 clula excelappl:range("A1"):SELECT. N clulas 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 clula. excelappl:range("A1"):font:colorindex = 2. /* vide tabela de cores abaixo */ obs.: O range pode ser substitudo por controle de variveis como exemplo abaixo: excelappl:range(STRING(c-coluna[1]) + STRING(i-linha, "99999999") + ":" + STRING(c-coluna[4]) + STRING((ilinha + 5), "99999999")):FONT:size = 12. Trocar cor da clula excelappl:range("A1"):interior:colorindex = 10. /* 10 o cdigo 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 limo 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 mximo 55. Padres (Sombreamento de clula) excelappl:range("P" + STRING(i-linha)):interior:Pattern = 9. 9 um dos padres, verificar os outros no Excel. Congelar painis excelappl:range("A" + STRING(i-linha, "99999999")):SELECT. /* precisa selecionar as clulas primeiro */ excelappl:ActiveWindow:FreezePanes = True. Autofiltro excelappl:range("A" + STRING(i-linha, "99999999")):SELECT. /* precisa selecionar as clulas primeiro */ excelappl:range("A" + STRING(i-linha, "99999999")):autofilter(,,,).

Autoajuste de clulas excelappl:Cells:SELECT. /* precisa selecionar todas primeiro */

excelappl:Cells:EntireColumn:AutoFit. Esse comando simula a ao de clicar no quadrado superior esquerdo entre as linhas e colunas (SELECT) e dar um duplo clique em uma das divises de clulas para autoajuste (AUTOFIT) Inserir Bordas - Borda ao redor de uma seleo 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 excelappl:Range("d10:d20"):Borders(2):LineStyle excelappl:Range("b20:d20"):Borders(4):LineStyle excelappl:Range("b10:b20"):Borders(1):LineStyle = = = = 12. 10. 12. 12. = = = = 3. 2. 2. 3.

excelappl:Range("A" + string(i-linha)):Borders(8):Weight excelappl:Range("A" + string(i-linha)):Borders(2):Weight excelappl:Range("A" + string(i-linha)):Borders(4):Weight excelappl:Range("A" + string(i-linha)):Borders(1):Weight Obs.: varia de 1 a 4 excelappl:Range("b10:d10"):Borders(8):ColorIndex excelappl:Range("d10:d20"):Borders(2):ColorIndex excelappl:Range("b20:d20"):Borders(4):ColorIndex excelappl:Range("b10:b20"):Borders(1):ColorIndex Cdigo 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 = = = = 1. 1. 2. 2.

chworkSheet:Pictures:Insert("C:\temp\windows.jpg"):Select

Quebra de Pgina Para inserir uma quebra pagina no Excel.

1a forma: chWorksheet:HPageBreaks:Add(chWorksheet:Range("A45")). chWorksheet:VPageBreaks:Add(chWorksheet:Range("L1")). /* Horizontal */ /* Vertical */

obs.: no necessrio utilizar os dois, pode-se usar apenas um de acordo com a necessidade. Lembrando que a quebra pode ser em uma clula varivel, nesse caso fica assim: chWorkSheet:HPageBreaks:Add(chWorksheet:Range("A" + STRING(i-linha))). /* onde ilinha a varivel de controle */ 2a forma: chBreakLine = chWorkSheet:Rows(STRING(i-linha)). /* Horizontal */ chBreakLine = chWorkSheet:COLUMNS("20"). /* Vertical */ chWorkSheet:HPageBreaks:Add(chBreakLine). IMPORTANTE: A quebra de pgina no funciona se os tamanhos de altura e largura da pgina forem especificados como modelo abaixo: chWorkSheet:PageSetup:Zoom = FALSE. chWorkSheet:PageSetup:FitToPagesWide = 1. chWorkSheet:PageSetup:FitToPagesTall = 10. PARA FUNCIONAR, O ZOOM NO PODE ESTAR DESABILITADO. chWorkSheet:PageSetup:Zoom = 100. /* PODE SER OUTRO VALOR, 70 POR EXEMPLO */

Manipulao do arquivo
Mostrar mensagens de Alerta (confirmao 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 no queira que aparece as mensagens de confirmao, basta deixar o parmetro como FALSE. Sugiro colocar sempre. Salvar arquivos excelappl:Workbooks:Item(1):SaveAs("c:\temp\teste.xls",,,,,,). Cada vrgula representa um parmetro: Os parmetros do SaveAs so: 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 impresso excelappl:VISIBLE = TRUE. /* para funcionar a planilha tem que estar visvel */

excelappl:ActiveWindow:SelectedSheets:PrintPreview. Imprimir arquivos excelappl:ActiveWindow:SelectedSheets:Printout. Ou passando parmetros: Excelappl:ActiveWindow:SelectedSheets:PrintOut(1,true) Onde: Copies:=1, Collate:=True Verificar outros parmetros do Excel caso necessrio. Obs.: para a impresso, 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 padro do Windows.

Nota Importante: Verificar se a verso do Excel utilizada possui o comando desejado. Por exemplo, a configurao de campo para Separador Decimal no existe no Excel 2000, portanto o comando no vai funcionar.

Dica muito importante:


Todos os comandos podem ser obtidos atravs do prprio Excel atravs de Macro. Para isso, basta abrir o Excel, escolher a opo FERRAMENTAS / MACRO / GRAVAR NOVA MACRO. (Anote o nome da Macro) e no fechar a macro (parar gravao - quadrado / stop) na janelinha de parmetro da Macro, at executar as tarefas necessrias. Com essa janela da macro aberta, realizar todas as alteraes desejadas, como configurao de clula, configurao de pgina, utilizao dos botes do Excel, etc. Depois de terminado, parar a macro (quadradinho da janela da macro). Escolher a opo FERRAMENTAS / MACRO / MACRO (alt + F8), selecionar a macro criada e clicar no boto Editar. Verificar o cdigo gerado e adaptar com os comandos progress. Caso o comando no seja exatamente igual, possvel ver a sintaxe do comando no progress atravs 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 varivel definida no seu programa Value o comando desejado = <anytype>-var o valor que deseja colocar na clula Exemplo prtico: excelappl:range("A1"):VALUE = d-valor. Nesse manual esto apenas os comandos mais utilizados. Caso tenha alguma dvida ou problema, enviar e-mail para Marcio Sacramoni (marcio@kconsulting.com.br) Segue abaixo modelo simples de utilizao do Progress x Excel. /******************************************************************************\ ** Exemplo de programa de impresso Progress x Excel ** ** Marcio Sacramoni ** ** marcio@kconsulting.com.br ** \******************************************************************************/ /* Obs.: os comandos de formatao de clula so opcionais, se no informados, vo respeitar os padres do Excel. Valido para toda a formatao: bordas, cores, tamanhos (de letra, linhas, colunas), tipo de valor (texto, numrico), zoom de pagina, alinhamento, etc */ DEF DEF DEF DEF DEF VAR VAR VAR VAR VAR excelappl ChWorkSheet i-linha c-modelo l-imprime AS AS AS AS AS COM-HANDLE COM-HANDLE INTE CHAR LOGICAL INIT NO NO-UNDO. NO-UNDO. NO-UNDO. NO-UNDO. 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 varivel 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 clula 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, no confundir com % de zoom da impresso */ chWorkSheet:PageSetup:RightFooter = "PAGINA: " + "&P/&N".

/* chWorkSheet:PageSetup:Zoom = 60. */ /* ajusta a impresso 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(ilinha)):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(ilinha)):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 tambm pode ser controlada por variveis */ 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" texto */ excelappl:range("B" excelappl:range("B" o conteudo para caber + STRING(i-linha)):numberformat = "@". /* transforma em + STRING(i-linha)):VALUE = ITEM.desc-item. + STRING(i-linha, "99999999")):ShrinkToFit = TRUE. /* ajusta na clula. Tem que vir depois da insero 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(ilinha)):borderaround(1,2,1). excelappl:range("B" + STRING(i-linha) + ":B" + STRING(ilinha)):borderaround(1,2,1). excelappl:range("C" + STRING(i-linha) + ":C" + STRING(ilinha)):borderaround(1,2,1). ASSIGN i-linha = i-linha + 1. IF i-linha > 20 THEN LEAVE. /* s para no ficar muito grande */ END. ASSIGN i-linha = i-linha + 1. excelappl:range("B" + STRING(i-linha)):VALUE = "Peso Total". excelappl:range("C" excelappl:range("B" excelappl:range("C" excelappl:range("C" excelappl:range("C" "999999") + ")". + + + + + STRING(i-linha)):numberformat = "#.##0,00". STRING(i-linha)):HorizontalAlignment = 4. /* Direita */ STRING(i-linha)):HorizontalAlignment = 4. /* Direita */ STRING(i-linha)):Font:Bold = TRUE. STRING(i-linha)):VALUE = "=SUM(C3:C" + STRING(i-linha - 1,

excelappl:range("A" + STRING(i-linha) + ":C" + STRING(ilinha)):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 no queira visualizar o arquivo na tela */ END. ELSE excelappl:VISIBLE = TRUE. RELEASE OBJECT excelappl NO-ERROR. RELEASE OBJECT chWorksheet NO-ERROR.

Você também pode gostar