Skip to content

Exemplo bulk

Saulo Martins edited this page Jul 4, 2026 · 1 revision

Exemplo - Preenchimento em massa (bulk)

O preenchimento em massa (bulk) é o modo mais rápido de gerar planilhas com grande volume de linhas. Em vez de posicionar célula a célula com Pos/SetValue, as colunas são definidas uma única vez e as linhas são alimentadas em sequência.

Fluxo

  1. BulkNewField - define cada coluna (posição, tipo, estilo)
  2. DefBulkLine - cria a definição da linha
  3. SetValueBulk - informa o valor de cada coluna
  4. SetBulkLine - fecha a linha
  5. FlushBulk - grava os dados na planilha

Exemplo - 1000 linhas

#include "totvs.ch"
User Function ytst7()
	Local nLinha
	Local oExcel     := custom.excel.Xlsx():New("Pasta1")
	Local aCampos    := {}
	Local nPosBorda2 := oExcel:Borda("ALL")
	Local oBordas    := oExcel:NewStyle():Setborder(nPosBorda2)   //Estilo com bordas
	Local nPosCor    := oExcel:CorPreenc("FF0000FF")              //Cor de fundo azul
	Local oStAzul    := oExcel:NewStyle(oBordas):Setfill(nPosCor) //Herança de bordas + fundo azul

	oExcel:ADDPlan() //Adiciona uma planilha em branco
	AADD(aCampos,oExcel:BulkNewField(nColuna=1,cTipo="C",oStyle=oBordas)) //C=Caractere
	AADD(aCampos,oExcel:BulkNewField(nColuna=2,cTipo="N",oStyle=oBordas)) //N=Numérico
	AADD(aCampos,oExcel:BulkNewField(nColuna=3,cTipo="L",oStyle=oBordas)) //L=Lógico
	AADD(aCampos,oExcel:BulkNewField(nColuna=4,cTipo="D",oStyle=oStAzul)) //D=Data

	oExcel:DefBulkLine(aCampos)
	For nLinha:=1 to 1000
		oExcel:SetValueBulk("Linha "+cValToChar(nLinha))
		oExcel:SetValueBulk(nLinha)
		oExcel:SetValueBulk(nLinha%2==0)
		oExcel:SetValueBulk(Date()+nLinha)
		oExcel:SetBulkLine()
	Next
	oExcel:FlushBulk()
	oExcel:Save(GetTempPath())
	oExcel:OpenApp()
	oExcel:Close()
Return

Obs

  • Para volumes muito grandes (100.000+ linhas), crie a instância com o tipo "B" (banco de dados temporário): custom.excel.Xlsx():New("Pasta1",,"B").
  • É possível aplicar regras de formatação dinâmica de linhas passando oExcel:NewRuleLine(...):GetArray() no segundo parâmetro do DefBulkLine.
  • O exemplo completo está em exemplo/ytst6.prw (função ytst7) no repositório.

Clone this wiki locally