Habilita a gravação dos dados auxiliares de processamento no Banco de Dados ao invés de utilizar a memória do sistema nos casos de geração de tabelas no formato "Tabela Xlsx", reduzindo drasticamente o consumo de memória.

  • Disponível a partir da Lib 20230227;
  • Uma vez que os dados de processamento são gravados no BD ao invés da memória, uma performance inferior é esperada em relação a geração com dados em memória;
  • A definição deste método deve ser realizada antes que seja realizada qualquer inserção de dados no objeto (ex.: AddRow);
  • Sua utilização exige ambiente previamente preparado, visto a necessidade de gravação dos dados no BD;
  • Funcional apenas para ambientes com versão do DbAccess 22.1.1.0 ou superior.

Sintaxe

lHabilitou := FwMsExcelXlsx():SetWriteinDB(<lWriteinDb>, <nLimit>) 

Parâmetros


NomeTipoDescriçãoDefaultObrigatório
lWriteinDbLógicoInformar .T. para habilitar a gravação no BD
X
nLimitNumérico

Indica o limite de registros para disparar o Bulk Insert. 

200.000


Retorno


TipoDescrição
Lógico

Informa se a funcionalidade foi habilitada com sucesso.

Exemplo:
Caso seja efetuada uma tentativa de uso em ambiente com DbAccess inferior a 22.1.1.0, será retornado .F. e nesta situação os dados serão gravados da forma padrão (em memória), ocasionando maior consumo de memória do sistema.

Importante

Considerações sobre o uso do parâmetro <nLimit>:

  • Para reduzir o impacto de performance, a gravação no banco de dados ocorre por Bulk Insert, por padrão os registros são gravados em blocos de 200.000 registros (células);
  • Por limitação do SQLite, a inserção ocorre registro a registro gerando impacto de performance;
  • Quanto maior o numero de registros, melhor será a performance neste modo porém com maior consumo de memória e custo para o BD.



Exemplo Implementação
User Function TESTE()
Local oExcel := FwMsExcelXlsx():New()
Local lWriteDb := .T.

//Habilita dados de processamento no BD e com Bulk ocorrendo com até 200 mil registros.
lWriteDb := oExcel:SetWriteinDb(.T., 200000)

If !lWriteDb 
	conout("Não foi possível habilitar o recurso de dados em disco, o processamento consumirá a memória do servidor."
EndIf

lRet := oExcel:IsWorkSheet("WorkSheet1")
oExcel:AddworkSheet("WorkSheet1")

lRet := oExcel:IsWorkSheet("WorkSheet1")
oExcel:AddTable ("WorkSheet1","Table1")
oExcel:AddColumn("WorkSheet1","Table1","Col1",1,1,.F., "999.9")
oExcel:AddColumn("WorkSheet1","Table1","Col2",2,2,.F., "999.99")
oExcel:AddColumn("WorkSheet1","Table1","Col3",3,3,.F., "999.999")
oExcel:AddColumn("WorkSheet1","Table1","Col4",1,1,.T., "999.9999")
oExcel:AddColumn("WorkSheet1","Table1","Col5",1,1,.T., "999.99999")
oExcel:AddColumn("WorkSheet1","Table1","Col6",1,1,.T., "999")

oExcel:AddRow("WorkSheet1","Table1",{11.1,12.11,13.111,14.1111, 14.12345, 12.35})
oExcel:AddRow("WorkSheet1","Table1",{21,22,23,24})
oExcel:AddRow("WorkSheet1","Table1",{31,32,33,34})
oExcel:AddRow("WorkSheet1","Table1",{41,42,43,44})

oExcel:SetFont("arial")
oExcel:SetFontSize(20)
oExcel:SetItalic(.T.)
oExcel:SetBold(.T.)
oExcel:SetUnderline(.T.)

oExcel:AddworkSheet("WorkSheet2")
oExcel:AddTable("WorkSheet2","Table1")
oExcel:AddColumn("WorkSheet2","Table1","Col1",1, 1)
oExcel:AddColumn("WorkSheet2","Table1","Col2",2, 2)
oExcel:AddColumn("WorkSheet2","Table1","Col3",3, 3)
oExcel:AddColumn("WorkSheet2","Table1","Col4",1, 4)
oExcel:AddColumn("WorkSheet2","Table1","Col5",1)

oExcel:AddRow("WorkSheet2","Table1",{"11",12,13,stod("20121212"), .F.})
oExcel:AddRow("WorkSheet2","Table1",{"21",22,23,stod("20121212"), .T.})
oExcel:AddRow("WorkSheet2","Table1",{"31",32,33,stod("20121212"), .F.})
oExcel:AddRow("WorkSheet2","Table1",{"41",42,43,stod("20121212"), .T.})
oExcel:AddRow("WorkSheet2","Table1",{"51",52,53,stod("20121212"), .F.})

oExcel:Activate()

oExcel:GetXMLFile("TESTE.xlsx")

oExcel:DeActivate()

Return



  • Sem rótulos