-
Notifications
You must be signed in to change notification settings - Fork 27
Exemplo graficos
Saulo Martins edited this page Jul 5, 2026
·
2 revisions
Exemplo completo de geração de todos os tipos de gráfico suportados pela biblioteca, divididos em três casos de teste.
Fonte: exemplo/custom.excel.grafico.teste.tlpp
Gera uma planilha com dados de vendas por região e de dispersão (temperatura x sorvetes), inserindo 5 gráficos (colunas agrupadas, barras empilhadas, linhas com marcadores, pizza e dispersão XY).
#include "tlpp-core.th"
#include "protheus.ch"
Namespace custom.excel.teste
User Function tstGrafico()
Local oExcel As Object
Local oGraf As Object
Local oSerie As Object
Local nCont As Numeric
Local aMeses As Array
Local aSudeste As Array
Local aSul As Array
Local aNordeste As Array
Local aTemp As Array
Local aSorvete As Array
RpcSetEnv("99","01") //Ajustar empresa/filial do ambiente
//Dados de exemplo - vendas por região
aMeses := {"Jan","Fev","Mar","Abr","Mai","Jun"}
aSudeste := {100,120,90,140,160,150}
aSul := {80,70,95,85,110,105}
aNordeste := {60,75,70,90,95,120}
//Dados de exemplo - dispersão (temperatura x venda de sorvete)
aTemp := {18,20,22,24,26,28,30,32,34,36}
aSorvete := {12,15,20,26,30,38,45,50,58,65}
oExcel := custom.excel.Xlsx():New(cNomeFile = "TstGrafico", cTipo = "A")
oExcel:ADDPlan(cNome = "Dados")
//Preenchimento com Pos():SetValue(), linhas e colunas sempre em ordem sequencial
//Linha 1 - cabeçalhos das duas tabelas (A1:D1 e F1:G1)
oExcel:Pos(1,1):SetValue("Mês")
oExcel:Pos(1,2):SetValue("Sudeste")
oExcel:Pos(1,3):SetValue("Sul")
oExcel:Pos(1,4):SetValue("Nordeste")
oExcel:Pos(1,6):SetValue("Temperatura")
oExcel:Pos(1,7):SetValue("Sorvetes")
//Linhas 2 a 11 - vendas por região (A2:D7) e dispersão (F2:G11)
For nCont:=1 to Len(aTemp)
If nCont<=Len(aMeses)
oExcel:Pos(nCont+1,1):SetValue(aMeses[nCont])
oExcel:Pos(nCont+1,2):SetValue(aSudeste[nCont])
oExcel:Pos(nCont+1,3):SetValue(aSul[nCont])
oExcel:Pos(nCont+1,4):SetValue(aNordeste[nCont])
Endif
oExcel:Pos(nCont+1,6):SetValue(aTemp[nCont])
oExcel:Pos(nCont+1,7):SetValue(aSorvete[nCont])
Next
//----------------------------------------------------------------------
//GRÁFICO DE COLUNAS AGRUPADAS
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("col")
oGraf:SetTitulo("Vendas por Região - Colunas")
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSudeste , aCat = aMeses)
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSul , aCat = aMeses)
oGraf:AddSerie(cNome = "Nordeste" , cRefVal = "Dados!$D$2:$D$7", cRefCat = "Dados!$A$2:$A$7", aVal = aNordeste, aCat = aMeses)
oGraf:Insert(nLinha = 1, nColuna = 9, nLinha2 = 16, nColuna2 = 17)
//----------------------------------------------------------------------
//GRÁFICO DE BARRAS HORIZONTAIS EMPILHADAS
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("bar")
oGraf:SetAgrupamento("stacked")
oGraf:SetTitulo("Vendas por Região - Empilhado")
oGraf:SetLegenda(lExibir = .T., cPosicao = "b") //Legenda no rodapé
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", cCor = "FF4F81BD")
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7", cCor = "FFC0504D")
oGraf:AddSerie(cNome = "Nordeste" , cRefVal = "Dados!$D$2:$D$7", cRefCat = "Dados!$A$2:$A$7", cCor = "FF9BBB59")
oGraf:Insert(nLinha = 18, nColuna = 9, nLinha2 = 33, nColuna2 = 17)
//----------------------------------------------------------------------
//GRÁFICO DE LINHAS COM MARCADORES
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("line")
oGraf:SetTitulo("Evolução Mensal - Linhas")
oGraf:SetMarcador(.T.)
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7")
oSerie := oGraf:AddSerie(cNome = "Nordeste", cRefVal = "Dados!$D$2:$D$7", cRefCat = "Dados!$A$2:$A$7")
oSerie:SetSuavizar(.T.) //Apenas esta série com linha suavizada
oGraf:Insert(nLinha = 1, nColuna = 19, nLinha2 = 16, nColuna2 = 27)
//----------------------------------------------------------------------
//GRÁFICO DE PIZZA COM RÓTULOS
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("pie")
oGraf:SetTitulo("Participação Mensal - Sudeste")
oGraf:SetRotulos(lExibir = .T., lPercentual = .T., lCategoria = .F.)
oGraf:AddSerie(cNome = "Sudeste", cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSudeste, aCat = aMeses)
oGraf:Insert(nLinha = 18, nColuna = 19, nLinha2 = 33, nColuna2 = 27)
//----------------------------------------------------------------------
//GRÁFICO DE DISPERSÃO
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("scatter")
oGraf:SetEstilo("marker") //Somente pontos
oGraf:SetTitulo("Temperatura x Venda de Sorvetes")
oGraf:SetLegenda(lExibir = .F.)
oSerie := oGraf:AddSerie(cNome = "Sorvetes")
oSerie:SetXY(cRefX = "Dados!$F$2:$F$11", cRefY = "Dados!$G$2:$G$11", aX = aTemp, aY = aSorvete)
oGraf:Insert(nLinha = 35, nColuna = 9, nLinha2 = 50, nColuna2 = 17)
//Gera o arquivo, abre no aplicativo e libera os objetos
oExcel:Save(GetTempPath())
oExcel:OpenApp()
oExcel:Destroy()
ReturnGera gráficos de área empilhada, colunas 3D, pizza 3D, ações (stock), radar preenchido, rosca, bolhas, pizza de pizza (ofpie) e superfície 3D.
User Function tstGrafico2()
Local oExcel As Object
Local oGraf As Object
Local oSerie As Object
Local nCont As Numeric
Local aMeses As Array
Local aSudeste As Array
Local aSul As Array
Local aNordeste As Array
Local aAbertura As Array
Local aMaxima As Array
Local aMinima As Array
Local aFecha As Array
Local aX As Array
Local aY As Array
Local aTam As Array
RpcSetEnv("99","01") //Ajustar empresa/filial do ambiente
//Dados de exemplo - vendas por região
aMeses := {"Jan","Fev","Mar","Abr","Mai","Jun"}
aSudeste := {100,120,90,140,160,150}
aSul := {80,70,95,85,110,105}
aNordeste := {60,75,70,90,95,120}
//Dados de exemplo - cotações para o gráfico de ações (OHLC)
aAbertura := {50,53,51,55,58,57}
aMaxima := {55,56,56,60,61,60}
aMinima := {48,50,49,53,55,54}
aFecha := {53,51,55,58,57,59}
//Dados de exemplo - bolhas (X, Y e tamanho)
aX := {10,20,30,40,50,60}
aY := {30,45,25,60,40,70}
aTam := {5,10,7,15,9,12}
oExcel := custom.excel.Xlsx():New(cNomeFile = "TstGrafico2", cTipo = "A")
oExcel:ADDPlan(cNome = "Dados")
//Preenchimento com Pos():SetValue(), linhas e colunas sempre em ordem sequencial
//Linha 1 - cabeçalhos das três tabelas (A1:D1, F1:J1 e L1:N1)
oExcel:Pos(1,1):SetValue("Mês")
oExcel:Pos(1,2):SetValue("Sudeste")
oExcel:Pos(1,3):SetValue("Sul")
oExcel:Pos(1,4):SetValue("Nordeste")
oExcel:Pos(1,6):SetValue("Dia")
oExcel:Pos(1,7):SetValue("Abertura")
oExcel:Pos(1,8):SetValue("Mxima")
oExcel:Pos(1,9):SetValue("Mnima")
oExcel:Pos(1,10):SetValue("Fechamento")
oExcel:Pos(1,12):SetValue("X")
oExcel:Pos(1,13):SetValue("Y")
oExcel:Pos(1,14):SetValue("Tamanho")
//Linhas 2 a 7 - dados das três tabelas
For nCont:=1 to Len(aMeses)
oExcel:Pos(nCont+1,1):SetValue(aMeses[nCont])
oExcel:Pos(nCont+1,2):SetValue(aSudeste[nCont])
oExcel:Pos(nCont+1,3):SetValue(aSul[nCont])
oExcel:Pos(nCont+1,4):SetValue(aNordeste[nCont])
oExcel:Pos(nCont+1,6):SetValue(nCont)
oExcel:Pos(nCont+1,7):SetValue(aAbertura[nCont])
oExcel:Pos(nCont+1,8):SetValue(aMaxima[nCont])
oExcel:Pos(nCont+1,9):SetValue(aMinima[nCont])
oExcel:Pos(nCont+1,10):SetValue(aFecha[nCont])
oExcel:Pos(nCont+1,12):SetValue(aX[nCont])
oExcel:Pos(nCont+1,13):SetValue(aY[nCont])
oExcel:Pos(nCont+1,14):SetValue(aTam[nCont])
Next
//----------------------------------------------------------------------
//GRÁFICO DE ÁREA EMPILHADA
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("area")
oGraf:SetAgrupamento("stacked")
oGraf:SetTitulo("Vendas por Região - rea Empilhada")
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSudeste , aCat = aMeses)
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSul , aCat = aMeses)
oGraf:AddSerie(cNome = "Nordeste" , cRefVal = "Dados!$D$2:$D$7", cRefCat = "Dados!$A$2:$A$7", aVal = aNordeste, aCat = aMeses)
oGraf:Insert(nLinha = 9, nColuna = 1, nLinha2 = 24, nColuna2 = 9)
//----------------------------------------------------------------------
//GRÁFICO DE COLUNAS 3D
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("col")
oGraf:Set3D(.T.) //Rotações padrão (X=15, Y=20)
oGraf:SetTitulo("Vendas por Região - Colunas 3D")
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:AddSerie(cNome = "Nordeste" , cRefVal = "Dados!$D$2:$D$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:Insert(nLinha = 9, nColuna = 11, nLinha2 = 24, nColuna2 = 19)
//----------------------------------------------------------------------
//GRÁFICO DE PIZZA 3D
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("pie")
oGraf:Set3D(lAtivo = .T., nRotX = 30)
oGraf:SetTitulo("Participação Mensal - Pizza 3D")
oGraf:SetRotulos(lExibir = .T., lPercentual = .T.)
oGraf:AddSerie(cNome = "Sudeste", cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSudeste, aCat = aMeses)
oGraf:Insert(nLinha = 26, nColuna = 1, nLinha2 = 41, nColuna2 = 9)
//----------------------------------------------------------------------
//GRÁFICO DE AÇÕES (OHLC)
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("stock")
oGraf:SetTitulo("Cotações - Ações")
oGraf:AddSerie(cNome = "Abertura" , cRefVal = "Dados!$G$2:$G$7", cRefCat = "Dados!$F$2:$F$7", aVal = aAbertura)
oGraf:AddSerie(cNome = "Máxima" , cRefVal = "Dados!$H$2:$H$7", cRefCat = "Dados!$F$2:$F$7", aVal = aMaxima)
oGraf:AddSerie(cNome = "Mínima" , cRefVal = "Dados!$I$2:$I$7", cRefCat = "Dados!$F$2:$F$7", aVal = aMinima)
oGraf:AddSerie(cNome = "Fechamento" , cRefVal = "Dados!$J$2:$J$7", cRefCat = "Dados!$F$2:$F$7", aVal = aFecha)
oGraf:Insert(nLinha = 26, nColuna = 11, nLinha2 = 41, nColuna2 = 19)
//----------------------------------------------------------------------
//GRÁFICO DE RADAR PREENCHIDO
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("radar")
oGraf:SetEstilo("filled")
oGraf:SetTitulo("Comparativo Regional - Radar")
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:Insert(nLinha = 43, nColuna = 1, nLinha2 = 58, nColuna2 = 9)
//----------------------------------------------------------------------
//GRÁFICO DE ROSCA
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("rosca")
oGraf:SetFuro(60)
oGraf:SetTitulo("Participação Mensal - Rosca")
oGraf:SetRotulos(lExibir = .T., lPercentual = .T.)
oGraf:AddSerie(cNome = "Sudeste", cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSudeste, aCat = aMeses)
oGraf:Insert(nLinha = 43, nColuna = 11, nLinha2 = 58, nColuna2 = 19)
//----------------------------------------------------------------------
//GRÁFICO DE BOLHAS
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("bolhas")
oGraf:SetTitulo("Análise - Bolhas")
oGraf:SetLegenda(lExibir = .F.)
oSerie := oGraf:AddSerie(cNome = "Indicador")
oSerie:SetXY(cRefX = "Dados!$L$2:$L$7", cRefY = "Dados!$M$2:$M$7", aX = aX, aY = aY)
oSerie:SetTamanho(cRefTam = "Dados!$N$2:$N$7", aTam = aTam)
oGraf:Insert(nLinha = 60, nColuna = 1, nLinha2 = 75, nColuna2 = 9)
//----------------------------------------------------------------------
//GRÁFICO DE PIZZA DE PIZZA (ofpie)
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("ofpie")
oGraf:SetTipo("pie")
oGraf:SetDivisao(cTipo = "pos", nValor = 2)
oGraf:SetTitulo("Participação Mensal - Pizza de Pizza")
oGraf:AddSerie(cNome = "Sudeste", cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aSudeste, aCat = aMeses)
oGraf:Insert(nLinha = 60, nColuna = 11, nLinha2 = 75, nColuna2 = 19)
//----------------------------------------------------------------------
//GRÁFICO DE SUPERFÍCIE 3D
//----------------------------------------------------------------------
oGraf := oExcel:NewChart("superficie")
oGraf:Set3D(.T.)
oGraf:SetTitulo("Vendas por Região - Superfície 3D")
oGraf:AddSerie(cNome = "Sudeste" , cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:AddSerie(cNome = "Sul" , cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:AddSerie(cNome = "Nordeste" , cRefVal = "Dados!$D$2:$D$7", cRefCat = "Dados!$A$2:$A$7")
oGraf:Insert(nLinha = 77, nColuna = 1, nLinha2 = 92, nColuna2 = 9)
//Gera o arquivo, abre no aplicativo e libera os objetos
oExcel:Save(GetTempPath())
oExcel:OpenApp()
oExcel:Destroy()
ReturnDemonstra o gráfico do tipo "combo", inserindo colunas no eixo principal de valores e linhas no eixo secundário (à direita).
User Function tstGraficoComb()
Local oExcel As Object
Local oCombo As Object
Local oCol As Object
Local oLin As Object
Local nCont As Numeric
Local aMeses As Array
Local aVendas As Array
Local aMargem As Array
RpcSetEnv("99","01") //Ajustar empresa/filial do ambiente
//Dados de exemplo - vendas e margem mensal
aMeses := {"Jan","Fev","Mar","Abr","Mai","Jun"}
aVendas := {100,120,90,140,160,150}
aMargem := {0.15,0.18,0.12,0.20,0.22,0.19}
oExcel := custom.excel.Xlsx():New(cNomeFile = "TstGraficoComb", cTipo = "A")
oExcel:ADDPlan(cNome = "Dados")
//Preenchimento com Pos():SetValue(), linhas e colunas sempre em ordem sequencial
oExcel:Pos(1,1):SetValue("Mês")
oExcel:Pos(1,2):SetValue("Vendas")
oExcel:Pos(1,3):SetValue("Margem")
For nCont:=1 to Len(aMeses)
oExcel:Pos(nCont+1,1):SetValue(aMeses[nCont])
oExcel:Pos(nCont+1,2):SetValue(aVendas[nCont])
oExcel:Pos(nCont+1,3):SetValue(aMargem[nCont])
Next
//----------------------------------------------------------------------
//COMBINAÇÃO: COLUNAS (VENDAS) + LINHA (MARGEM NO EIXO SECUNDÁRIO)
//----------------------------------------------------------------------
oCombo := oExcel:NewChart("combo")
oCombo:SetTitulo("Vendas x Margem")
oCombo:SetLegenda(lExibir = .T., cPosicao = "b")
//Gráfico membro: colunas de vendas (eixo primário)
oCol := custom.excel.chart.ChartBar():New(oExcel)
oCol:AddSerie(cNome = "Vendas", cRefVal = "Dados!$B$2:$B$7", cRefCat = "Dados!$A$2:$A$7", aVal = aVendas, aCat = aMeses, cCor = "FF4F81BD")
//Gráfico membro: linha de margem (eixo secundário à direita)
oLin := custom.excel.chart.ChartLine():New(oExcel)
oLin:AddSerie(cNome = "Margem", cRefVal = "Dados!$C$2:$C$7", cRefCat = "Dados!$A$2:$A$7", aVal = aMargem, aCat = aMeses, cCor = "FFC0504D")
oCombo:AddChart(oCol)
oCombo:AddChart(oChart = oLin, lEixoSecundario = .T.)
oCombo:Insert(nLinha = 9, nColuna = 1, nLinha2 = 24, nColuna2 = 9)
//Gera o arquivo, abre no aplicativo e libera os objetos
oExcel:Save(GetTempPath())
oExcel:OpenApp()
oExcel:Destroy()
Return- Olá Mundo
- Exemplo Ler xlsx
- Métodos Principais
- New - Construtor da classe
- Open - Abrir planilha (senha opcional)
- GetError - Obter erro da última abertura
- AddPlan - Adicionar planilha
- SetValue - Definir valor da célula
- GetValue - Obter valor da célula
- Save - Salvar planilha
- SetPassword - Proteger com senha de abertura
- OpenApp / Close - Abrir no Excel / Fechar objeto
- SetsheetProtection - Proteger planilha contra edição
- Métodos Posicionamento e referência
- Métodos Células e Conteúdo
- Métodos Estilos
- NewStyle
- NewStyRules
- CorPreenc
- EfeitoPreenc
- AddFont
- Alinhamento
- Borda
- AddFmt
- AddFmtNum
- FormatCond / FormatCondDup / FormatCondTempo
- DataBar - Barra de dados
- IconSet - Conjunto de ícones
- Cellprotection
- Métodos Dimensões e Agrupamento
- Métodos Impressão
- Métodos Imagens
- Gráficos (Charts)
- Visão Geral — Tipos suportados
- Exemplo Completo
- NewChart - Criar gráfico pelo atalho
- Métodos comuns (todos os tipos)
- AddSerie - Adicionar série de dados
- SetTitulo / SetLegenda / SetGrade - Título, legenda e grade
- Set3D - Visualização 3D
- Insert - Inserir na planilha
- Tipos de gráfico
- ChartBar - Colunas e barras
- ChartLine - Linhas
- ChartPie - Pizza
- ChartScatter - Dispersão XY
- ChartArea / ChartStock / ChartRadar - Área, Ações e Radar
- ChartDoughnut / ChartOfPie - Rosca e Pizza de Pizza
- ChartBubble / ChartSurface - Bolhas e Superfície
- ChartCombo - Combinação de gráficos
- Tabela formatada
- Preenchimento em massa (bulk)
- Exemplo 1 - Básico
- BulkNewField - Definição de novas colunas do bulk
- DefBulkLine - Criar definição de campos para preenchimento em massa
- SetValueBulk - Definir valor para preenchimento de bulk
- SetBulkLine - Preenche a linha em bulk do Excel
- FlushBulk - Atualiza dados do Excel
- Preenchimento Excel com Query/Alias
- Exemplo 1 - Básico
- Alias2Tab - Preenche o Excel baseado no alias
- NewFldTab - Altera definição de campos ou cria novo campo
- DefSubTotal - Cria subtotal e agrupamento de subtotal
- NewRuleLine - Regra de formação de linhas