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
| Nome | Tipo | Descrição | Default | Obrigatório |
|---|---|---|---|---|
| lWriteinDb | Lógico | Informar .T. para habilitar a gravação no BD | X | |
| nLimit | Numérico | Indica o limite de registros para disparar o Bulk Insert. | 200.000 |
Retorno
| Tipo | Descrição |
|---|---|
| Lógico | Informa se a funcionalidade foi habilitada com sucesso. |
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
Import HTML Content
Visão Geral
Conteúdo das Ferramentas