Classificação de relatorio no Excel com Progress

Discussão em 'Progress 4GL' iniciado por andreluisbrandao, Julho 17, 2015.

  1. andreluisbrandao

    andreluisbrandao Membro Participativo

    Boa tarde a todos,

    Tenho desenvolvidos alguns relatorios em progress gerando planilhas em excel e gostaria de uma dica dos mais experientes.

    Quando faço planilhas e quero classifica-las uso sempre o break by , mas neste caso estou querendo classificar a planilha , depois de montada. Como faço isso executando alguma macro em linha de comando progress?

    Atenciosamente,

    André
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    1. Abra ou cria um arquivo com alguns registros no excel.

    2. Clique para gravar um Macro no Excel.

    3. Faça a classificação no Excel

    4. Dê stop no Macro e analise o código.

    5. Transcreva o código para Progress, substituindo . (ponto) por : (dois pontos).
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Aqui é o que o macro mostra (em VB) ao ordenar:

    upload_2015-7-17_14-22-34.png

    Código:
        ActiveWorkbook.Worksheets("Plan1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Plan1").Sort.SortFields.Add Key:=Range("A2:A5"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Plan1").Sort
            .SetRange Range("A1:B5")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    

    Agora para transcrever em progress não é muito difícil, a parte mais importante é essa:

    Código:
        With ActiveWorkbook.Worksheets("Plan1").Sort
            .SetRange Range("A1:B5")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    
    Onde está configurando um objeto (Handle em progress) e setando os valores.

    Segundo o próprio macro, clicando com botão direito sobre a variável e em seguida em definição, os variáveis possuem o seguinte valor:

    upload_2015-7-17_14-24-56.png
    upload_2015-7-17_14-25-13.png
    upload_2015-7-17_14-25-27.png

    Espero que tenha ajudado.

    Atenciosamente

    Rafael
  4. andreluisbrandao

    andreluisbrandao Membro Participativo

    Bom dia,

    Mas não consegui transcrever isso para o progress...

    obrigado.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Ordenação transcrito para Progress:
    Código:
    /* Ordenação Ascendente */
    DEF VAR vSort AS COM-HANDLE.
    vSort = chWorkSheet:SORT.
    vSort:SortFields:CLEAR. /* Limpa as ordenações anteriores */
    vSort:SortFields:ADD(chWorksheet:Range("A1:A3"),0,1,0). /* vSort:SortFields:ADD(RANGE,SortOn,Order,DataOption) ONDE order => 1 = ASCENDING, 2 = DESCENDING */
    vSort:setRange(chWorksheet:Range("A1:A3")).
    vSort:HEADER = 0. /* 1 = Define que a primeira linha é cabeçalho */
    vSort:MatchCase = FALSE.
    vSort:ORIENTATION = 1. /* xlTopToBottom = 1 */
    vSort:SortMethod = 1. /* xlPinYin = 1,xlStroke = 2 */
    vSort:APPLY. /* Efetiva a Ordenação */
    
    Exemplo Prático:
    Código:
    DEFINE VARIABLE chExcel       AS COM-HANDLE NO-UNDO. /* Documento Excel */
    DEFINE VARIABLE chWorksheet   AS COM-HANDLE NO-UNDO. /* Abas da Planilha */
    DEFINE VARIABLE chWorkbook    AS COM-HANDLE NO-UNDO. /* Planilha */
    
    DEF VAR xsheet AS INTEGER INIT 1 NO-UNDO.
    DEF VAR xlinha AS INTEGER INIT 1 NO-UNDO.
    
    CREATE "Excel.Application" chExcel.        /*criar planilha*/
    chExcel:VISIBLE = TRUE.                    /*visualiza o relatório no excel automaticamente*/
    chWorkBook      = chExcel:WorkBooks:ADD(). /*Adiciona a primeira aba*/
    
    /* Seleciona Aba da Planilha */
    chWorkbook:Worksheets(xsheet):Activate.
    chWorksheet = chWorkbook:Worksheets(xsheet).
    
    /* Renomeia a Aba */
    chWorkSheet:NAME = "NOME DA PLANILHA".
    
    /* Seta a Fonte */
    ASSIGN chWorkSheet:Cells        :FONT:NAME    = "ARIAL"
           chWorkSheet:Cells        :FONT:SIZE    = 10
           chWorksheet:COLUMNS("C") :NUMBERFORMAT = "_(* #.##0,00_)".
    
    /* Acerta o alinhamento das colunas */
    ASSIGN chWorkSheet:COLUMNS("C"):HorizontalAlignment = 3
           chWorkSheet:COLUMNS("B"):HorizontalAlignment = 3.
    
    /* Seta Titulo das Colunas */
    ASSIGN chWorksheet:Range("A1"):VALUE  = "1"                                    
           chWorksheet:Range("A2"):VALUE  = "2"
           chWorksheet:Range("A3"):VALUE  = "3".
    
    /* Ordenação Ascendente */
    DEF VAR vSort AS COM-HANDLE.
    vSort = chWorkSheet:SORT.
    vSort:SortFields:CLEAR. /* Limpa as ordenações anteriores */
    vSort:SortFields:ADD(chWorksheet:Range("A1:A3"),0,1,0). /* vSort:SortFields:ADD(RANGE,SortOn,Order,DataOption) ONDE order => 1 = ASCENDING, 2 = DESCENDING */
    vSort:setRange(chWorksheet:Range("A1:A3")).
    vSort:HEADER = 0. /* 1 = Define que a primeira linha é cabeçalho */
    vSort:MatchCase = FALSE.
    vSort:ORIENTATION = 1. /* xlTopToBottom = 1 */
    vSort:SortMethod = 1. /* xlPinYin = 1,xlStroke = 2 */
    vSort:APPLY. /* Efetiva a Ordenação */
    
    chExcel:VISIBLE = TRUE.
    
    /*para fechar a planilha */
    RELEASE OBJECT chExcel.
    RELEASE OBJECT chWorkbook.
    RELEASE OBJECT chWorksheet.
    
    Atenciosamente

    Rafael
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Exemplo Prático (Corrigido)
    Código:
    DEFINE VARIABLE chExcel AS COM-HANDLE NO-UNDO. /* Documento Excel */
    DEFINE VARIABLE chWorksheet AS COM-HANDLE NO-UNDO. /* Abas da Planilha */
    DEFINE VARIABLE chWorkbook AS COM-HANDLE NO-UNDO. /* Planilha */
    
    DEF VAR xsheet AS INTEGER INIT 1 NO-UNDO.
    DEF VAR xlinha AS INTEGER INIT 1 NO-UNDO.
    
    CREATE "Excel.Application" chExcel. /*criar planilha*/
    chExcel:VISIBLE = TRUE. /*visualiza o relatório no excel automaticamente*/
    chWorkBook = chExcel:WorkBooks:ADD(). /*Adiciona a primeira aba*/
    
    /* Seleciona Aba da Planilha */
    chWorkbook:Worksheets(xsheet):Activate.
    chWorksheet = chWorkbook:Worksheets(xsheet).
    
    /* Renomeia a Aba */
    chWorkSheet:NAME = "NOME DA PLANILHA".
    
    /* Seta a Fonte */
    ASSIGN chWorkSheet:Cells :FONT:NAME = "ARIAL"
    chWorkSheet:Cells :FONT:SIZE = 10
    chWorksheet:COLUMNS("C") :NUMBERFORMAT = "_(* #.##0,00_)".
    
    /* Acerta o alinhamento das colunas */
    ASSIGN chWorkSheet:COLUMNS("C"):HorizontalAlignment = 3
    chWorkSheet:COLUMNS("B"):HorizontalAlignment = 3.
    
    /* Seta Titulo das Colunas */
    ASSIGN chWorksheet:Range("A1"):VALUE = "3"
    chWorksheet:Range("A2"):VALUE = "2"
    chWorksheet:Range("A3"):VALUE = "1".
    
    /* Ordenação Ascendente */
    DEF VAR vSort AS COM-HANDLE.
    vSort = chWorkSheet:SORT.
    vSort:SortFields:CLEAR. /* Limpa as ordenações anteriores */
    vSort:SortFields:ADD(chWorksheet:Range("A1:A3"),0,1,0). /* vSort:SortFields:ADD(RANGE,SortOn,Order,DataOption) ONDE order => 1 = ASCENDING, 2 = DESCENDING */
    vSort:setRange(chWorksheet:Range("A1:A3")).
    vSort:HEADER = 0. /* 1 = Define que a primeira linha é cabeçalho */
    vSort:MatchCase = FALSE.
    vSort:ORIENTATION = 1. /* xlTopToBottom = 1 */
    vSort:SortMethod = 1. /* xlPinYin = 1,xlStroke = 2 */
    vSort:APPLY. /* Efetiva a Ordenação */
    
    chExcel:VISIBLE = TRUE.
    
    /*para fechar a planilha */
    RELEASE OBJECT chExcel.
    RELEASE OBJECT chWorkbook.
    RELEASE OBJECT chWorksheet.
    

Compartilhe esta Página