Child pages
  • Dicas de Performance

No desenvolvimento utilizando a estrutura de classes Office, algumas dicas podem ser levadas em consideração para uma melhor performance:

1) Utilização das bibliotecas Offices como primeira entrada do propath.

    Como a estrutura de classes de manipulação do Office é complexa (aproximadamente 80 fontes) sua performance tem um incremento considerável quando se utiliza as mesmas como primeira entrada do propath.

Como ter o benefício

Adicionar a pasta "office" do foundation como primeiro item no propath Progress.

Exemplo:

 

2) Utilização do parâmetro -q (Quick Request startup parameter).

    Outra maneira de incrementar a performance da biblioteca Office é a utilização do parâmetro -q do Progress. Ao se habilitar o parâmetro, o Progress fará o cache dos arquivos .r em memória, tornando a sua leitura muito mais rápida. KB Progress: http://knowledgebase.progress.com/articles/Article/P12659

Como ter o benefício

Habilitar o parâmetro -q (Quick Request startup parameter) do Progress.

Exemplo:

3) Reaproveitamento de objetos no desenvolvimento Office

     Com a utilização de classes, e principalmente em função da arquitetura de integração Progress x LibreOffice, a reutilização de objetos utilizando variáveis torna o desempenho das aplicações Office muito melhor. Desta maneira, um objeto que será utilizado várias vezes no código, para a busca de outros objetos, poderá ser mantido em uma variável e reaproveitado.

Como ter o benefício

Reaproveitar um objeto que será utilizado várias vezes no programa, através de uma variável.

Exemplo: (Reaproveitamento da variável chWorkSheet)

DEFINE VARIABLE chWorkSheet AS office.iface.excel.WorkSheet NO-UNDO.
DEFINE VARIABLE chRange AS office.iface.excel.Range NO-UNDO.

chWorkSheet = chWorkBook:Sheets:ITEM(1).

chWorkSheet:Range("A" + String(i)):SetValue("A" + String(i)).
chWorkSheet:Range("B" + String(i)):SetValue(100).
chWorkSheet:Range("C" + String(i)):SetValue(100 * i).

     

Abaixo temos um exemplo prático do formato errado (menos performático) e do formato certo (mais performático):

Forma correta
DEFINE VARIABLE chExcel       AS office.iface.excel.ExcelWrapper  NO-UNDO.
DEFINE VARIABLE chWorkBook    AS office.iface.excel.WorkBook      NO-UNDO.
DEFINE VARIABLE chWorkSheet   AS office.iface.excel.WorkSheet     NO-UNDO.
DEFINE VARIABLE chRange       AS office.iface.excel.Range         NO-UNDO.
DEFINE VARIABLE i             AS INTEGER                          NO-UNDO.

{office/office.i Excel chExcel}
chExcel:SheetsInNewWorkbook = 1.
chWorkBook = chExcel:Workbooks:ADD().
 
chWorkSheet      = chWorkBook:Sheets:ITEM(1).
chWorkSheet:NAME = "Listagem".
chWorkSheet:Range("A1:C1"):Interior:ColorIndex = 23.
chWorkSheet:Range("A1:C1"):FONT:ColorIndex = 2.
chWorkSheet:Range("A1"):SetValue("Celula").
chWorkSheet:Range("B1"):SetValue("Valor").
chWorkSheet:Range("C1"):SetValue("Valor Multiplicado").
 
REPEAT i = 2 TO 100:
    chWorkSheet:Range("A" + String(i)):SetValue("A" + String(i)).
    chWorkSheet:Range("B" + String(i)):SetValue(100).
    chWorkSheet:Range("C" + String(i)):SetValue(100 * i).
END.

chWorkSheet:Range("A1:C1"):EntireColumn:AutoFit().

 

 

Forma incorreta
DEFINE VARIABLE chExcel       AS office.iface.excel.ExcelWrapper  NO-UNDO.
DEFINE VARIABLE chWorkBook    AS office.iface.excel.WorkBook      NO-UNDO.
DEFINE VARIABLE chRange       AS office.iface.excel.Range         NO-UNDO.
DEFINE VARIABLE i             AS INTEGER                          NO-UNDO.

{office/office.i Excel chExcel}
chExcel:SheetsInNewWorkbook = 1.
chWorkBook = chExcel:Workbooks:ADD().

chWorkBook:Sheets:ITEM(1):NAME = "Listagem".
chWorkBook:Sheets:ITEM(1):Range("A1:C1"):Interior:ColorIndex = 23.
chWorkBook:Sheets:ITEM(1):Range("A1:C1"):FONT:ColorIndex = 2.
chWorkBook:Sheets:ITEM(1):Range("A1"):SetValue("Celula").
chWorkBook:Sheets:ITEM(1):Range("B1"):SetValue("Valor").
chWorkBook:Sheets:ITEM(1):Range("C1"):SetValue("Valor Multiplicado").


REPEAT i = 2 TO 100:
    chWorkBook:Sheets:ITEM(1):Range("A" + String(i)):SetValue("A" + String(i)).
    chWorkBook:Sheets:ITEM(1):Range("B" + String(i)):SetValue(100).
    chWorkBook:Sheets:ITEM(1):Range("C" + String(i)):SetValue(100 * i).
END.

chWorkBook:Sheets:ITEM(1):Range("A1:C1"):EntireColumn:AutoFit().

 

 

 

 

 

  • No labels