Gerenciar Pastas de Trabalho de Gráficos em Apresentações no .NET
Visão geral
Este artigo explica como trabalhar com pastas de trabalho de gráficos no Aspose.Slides. Ele mostra como ler e gravar dados de gráficos através de streams de pastas de trabalho, usar células da pasta de trabalho como rótulos de dados do gráfico, acessar coleções de planilhas e especificar o tipo de fonte de dados para os valores do gráfico.
Ele também aborda o trabalho com pastas de trabalho externas como fontes de dados para gráficos. Os exemplos demonstram como criar e atribuir uma pasta de trabalho externa, recuperar o caminho de uma pasta de trabalho externa vinculada a um gráfico e editar os dados do gráfico quando a pasta de trabalho está disponível.
Para células de pasta de trabalho que representam dados ausentes, veja Controlar a Exibição de Células Vazia para a diferença entre uma célula vazia e zero, e uma comparação em gráfico de linhas dos modos de exibição disponíveis.
Incluir Dados de Linhas e Colunas Ocultas
Use IChart.PlotVisibleCellsOnly para controlar se um gráfico traça dados de linhas e colunas ocultas da planilha. Defina como true para traçar apenas células visíveis ou false para incluir tanto células visíveis quanto ocultas. Essa configuração controla a plotagem do gráfico; não oculta nem exibe linhas ou colunas da planilha.
A sample presentation contém um gráfico de colunas como o primeiro objeto em seu primeiro slide. A planilha incorporada, Sheet1, contém o intervalo de origem a seguir, A1:C4. A linha 3 e a coluna C estão ocultas, mas suas células ainda contêm valores.
| Linha da planilha | A: Mês | B: Varejo | C: Atacado (coluna oculta) |
|---|---|---|---|
| 2 | Janeiro | 10 | 30 |
| 3 (linha oculta) | Fevereiro | 40 | 60 |
| 4 | Março | 20 | 50 |
Acesse as células de origem através de IChartData.ChartDataWorkbook e leia IChartDataCell.IsHidden para inspecionar seu status de ocultação. Esta propriedade é somente leitura. Neste arquivo, B2 está visível, B3 pertence à linha oculta e C2 pertence à coluna oculta; o exemplo imprime False, True e True, respectivamente.
Para este exemplo, atualize os dados do gráfico após alterar a configuração de plotagem: mantenha a pasta de trabalho incorporada com ReadWorkbookStream e recarregue-a com WriteWorkbookStream. Ao incluir todas as células, use também SetRange para restaurar o intervalo completo, incluindo a categoria de fevereiro oculta. Simplemente mudar o sinalizador não é suficiente para atualizar os dados em cache do gráfico e os rótulos de categoria deste exemplo.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("hidden-source-data.pptx");
var slide = presentation.Slides[0];
if (slide.Shapes[0] is IChart chart)
{
var workbook = chart.ChartData.ChartDataWorkbook;
Console.WriteLine($"B2 hidden: {workbook.GetCell(0, "B2").IsHidden}");
Console.WriteLine($"B3 hidden: {workbook.GetCell(0, "B3").IsHidden}");
Console.WriteLine($"C2 hidden: {workbook.GetCell(0, "C2").IsHidden}");
using var workbookStream = chart.ChartData.ReadWorkbookStream();
foreach (var visibleOnly in new[] { true, false })
{
chart.PlotVisibleCellsOnly = visibleOnly;
// Atualiza os dados do gráfico a partir da pasta de trabalho incorporada.
workbookStream.Position = 0;
chart.ChartData.WriteWorkbookStream(workbookStream);
if (!visibleOnly)
{
// Restaura o intervalo de origem completo, incluindo categorias ocultas.
chart.ChartData.SetRange("Sheet1!$A$1:$C$4");
}
presentation.Save($"hidden_cells_{visibleOnly}.pptx", SaveFormat.Pptx);
}
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
O exemplo salva duas versões da apresentação: uma com apenas os valores de Varejo visíveis (10 e 20) e outra com todos os seis valores. As imagens abaixo foram renderizadas a partir das apresentações salvas após reabri‑las; ambos os arquivos preservam a configuração de plotagem atribuída. A linha 3 e a coluna C permanecem ocultas em ambas as pastas de trabalho incorporadas.
Apenas células visíveis (true) |
Todas as células (false) |
|---|---|
![]() |
![]() |
Uma célula oculta que contém um valor é diferente de uma célula vazia. IChart.DisplayBlanksAs controla como valores ausentes são exibidos; não inclui nem exclui dados de origem ocultos. Veja Controlar a Exibição de Células Vazia para um exemplo.
Recuperar o Intervalo de Dados de um Gráfico
Antes de atualizar os dados da pasta de trabalho em uma apresentação existente, inspecione os intervalos de origem para identificar quais células da planilha cada gráfico usa. O método IChartData.GetRange retorna o intervalo de dados atual como uma fórmula qualificada da planilha, como Sheet1!$A$1:$D$5. Aqui, Sheet1 é o nome da planilha, ! a separa do intervalo de células, e $A$1:$D$5 identifica as células de A1 a D5, inclusive. Os sinais de dólar indicam referências absolutas de linha e coluna.
O método lê o intervalo atual sem alterar o gráfico ou sua pasta de trabalho. Se o gráfico não usar uma pasta de trabalho como fonte de dados, ele lança InvalidOperationException. Para mais informações, veja a ChartData API Reference.
Este exemplo abre uma apresentação e verifica as formas diretamente em cada slide em busca de gráficos. Ele imprime o nome de cada gráfico e o intervalo de origem. Se um gráfico não usar uma pasta de trabalho, ele imprime uma mensagem e continua para o próximo gráfico.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("presentation.pptx");
foreach (var slide in presentation.Slides)
{
foreach (var shape in slide.Shapes)
{
if (shape is IChart chart)
{
try
{
var range = chart.ChartData.GetRange();
Console.WriteLine($"{chart.Name}: {range}");
}
catch (InvalidOperationException)
{
Console.WriteLine($"{chart.Name}: The chart does not use a workbook as its data source.");
}
}
}
}
Ler e Gravar Dados do Gráfico de uma Pasta de Trabalho
Aspose.Slides for .NET fornece os métodos ReadWorkbookStream e WriteWorkbookStream que permitem ler e gravar pastas de trabalho de dados de gráficos (contendo dados de gráfico editados com Aspose.Cells). Note que os dados do gráfico precisam estar organizados da mesma forma ou ter uma estrutura semelhante à da origem.
Este exemplo usa uma apresentação com um gráfico como o primeiro objeto em seu primeiro slide. Ele lê a pasta de trabalho incorporada em um stream, limpa as séries e categorias existentes e grava a mesma pasta de trabalho de volta. As alterações permanecem na memória; o exemplo não salva a apresentação.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("chart.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var chartData = chart.ChartData;
using var workbookStream = chartData.ReadWorkbookStream();
chartData.Series.Clear();
chartData.Categories.Clear();
workbookStream.Position = 0;
chartData.WriteWorkbookStream(workbookStream);
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
Validar o Layout do Gráfico Após Modificação da Pasta de Trabalho
Ao substituir uma pasta de trabalho incorporada por uma modificada, o gráfico retém suas coleções originais de séries e categorias. Essa incompatibilidade pode fazer com que IChart.ValidateChartLayout falhe com um erro de índice fora do intervalo. Limpe as séries e categorias existentes antes de gravar a pasta de trabalho atualizada de volta no gráfico. Este exemplo usa um gráfico que é o primeiro objeto no primeiro slide. O comentário indica onde a edição da pasta de trabalho ocorreria; o exemplo executável grava a pasta de trabalho original de volta e valida o layout na memória.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("chart.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var chartData = chart.ChartData;
using var workbookStream = chartData.ReadWorkbookStream();
// Modifique o fluxo da pasta de trabalho aqui, por exemplo, usando Aspose.Cells.
chartData.Series.Clear();
chartData.Categories.Clear();
workbookStream.Position = 0;
chartData.WriteWorkbookStream(workbookStream);
chart.ValidateChartLayout();
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
Limpar as coleções remove referências de dados obsoletas antes que a pasta de trabalho seja gravada de volta. Reconstrua quaisquer mapeamentos de séries e categorias necessários para a pasta de trabalho atualizada antes de usar o gráfico.
Definir Formatos Numéricos Personalizados para Células da Pasta de Trabalho
Use ChartDataCell.CustomNumberFormat para controlar como valores numéricos aparecem na pasta de trabalho incorporada ao gráfico. Por exemplo, um relatório pode precisar exibir uma taxa de conversão como porcentagem com quatro casas decimais e um coeficiente com cinco casas decimais. Mantenha ambos os valores numéricos para que permaneçam disponíveis para cálculos e plotagem do gráfico.
Um formato numérico altera a exibição, não o valor armazenado. O formato 0.0000% exibe 0.125 como 12.5000%; não substitui o número armazenado por 12.5. Da mesma forma, 0.00000 exibe 0.1234567 como 0.12346 sem arredondar o valor armazenado. Se o formato personalizado for uma string vazia (""), será usado PresetNumberFormat.
O exemplo a seguir cria um gráfico de colunas e acessa suas células através de ChartDataWorkbook. Na planilha 0, B2 contém a taxa de conversão e C2 contém o coeficiente. Ambas as células fornecem valores ao gráfico. O exemplo também habilita rótulos de valor vinculados aos formatos de origem.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
presentation.SlideSize.SetSize(720, 270, SlideSizeScaleType.DoNotScale);
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 20, 620, 210);
chart.HasTitle = false;
chart.Axes.VerticalAxis.IsNumberFormatLinkedToSource = false;
chart.Axes.VerticalAxis.NumberFormat = "0.00";
chart.Axes.VerticalAxis.IsAutomaticMinValue = false;
chart.Axes.VerticalAxis.MinValue = 0;
chart.ChartData.Series.Clear();
chart.ChartData.Categories.Clear();
var workbook = chart.ChartData.ChartDataWorkbook;
workbook.Clear(0);
var categoryCell = workbook.GetCell(0, "A2", "Sample");
chart.ChartData.Categories.Add(categoryCell);
var percentageCell = workbook.GetCell(0, "B2", 0.125);
percentageCell.CustomNumberFormat = "0.0000%";
var percentageName = workbook.GetCell(0, "B1", "Conversion rate");
var percentageSeries = chart.ChartData.Series.Add(percentageName, chart.Type);
percentageSeries.DataPoints.AddDataPointForBarSeries(percentageCell);
var precisionCell = workbook.GetCell(0, "C2", 0.1234567);
precisionCell.CustomNumberFormat = "0.00000";
var precisionName = workbook.GetCell(0, "C1", "Coefficient");
var precisionSeries = chart.ChartData.Series.Add(precisionName, chart.Type);
precisionSeries.DataPoints.AddDataPointForBarSeries(precisionCell);
foreach (var series in chart.ChartData.Series)
{
var labelFormat = series.DataPoints[0].Label.DataLabelFormat;
labelFormat.ShowValue = true;
labelFormat.IsNumberFormatLinkedToSource = true;
}
presentation.Save("CustomCellFormats.pptx", SaveFormat.Pptx);
Os formatos de célula da pasta de trabalho são separados dos formatos definidos diretamente nos eixos do gráfico ou nos rótulos de dados. Neste exemplo, cada rótulo exibe o valor da célula de origem porque ShowValue está habilitado e segue o formato numérico de origem porque IsNumberFormatLinkedToSource é true. Após salvar e reabrir a apresentação, os rótulos exibem 12.5000% e 0.12346, como mostrado abaixo. O eixo vertical usa seu próprio NumberFormat de 0.00, com IsNumberFormatLinkedToSource definido como false.
Para formatar um rótulo de dados de forma independente, defina seu sinalizador de vínculo à origem como false e atribua seu NumberFormat. Isso não altera o formato da célula da pasta de trabalho. Por exemplo, um formato de rótulo independente de 0.00 exibe o primeiro valor como 0.13, enquanto B2 ainda exibe 12.5000%. Veja Rótulos de Dados do Gráfico para formatação direta de rótulos.

Definir uma Célula da Pasta de Trabalho como Rótulo de Dados do Gráfico
Você pode usar texto de células da pasta de trabalho como rótulos de dados do gráfico.
Este exemplo adiciona um gráfico de bolhas com dados padrão ao primeiro slide de uma apresentação existente. Ele usa as células A10:A12 na planilha 0 para os três primeiros rótulos da primeira série, habilita rótulos a partir de células e salva a apresentação atualizada.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("chart2.pptx");
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Bubble, 50, 50, 600, 400, true);
var series = chart.ChartData.Series[0];
var workbook = chart.ChartData.ChartDataWorkbook;
series.Labels.DefaultDataLabelFormat.ShowLabelValueFromCell = true;
series.Labels[0].ValueFromCell = workbook.GetCell(0, "A10", "Label 0 cell value");
series.Labels[1].ValueFromCell = workbook.GetCell(0, "A11", "Label 1 cell value");
series.Labels[2].ValueFromCell = workbook.GetCell(0, "A12", "Label 2 cell value");
presentation.Save("resultchart.pptx", SaveFormat.Pptx);
Gerenciar Planilhas
A propriedade IChartDataWorkbook.Worksheets fornece acesso às planilhas em uma pasta de trabalho de gráfico. Este exemplo cria um gráfico de pizza com dados padrão e imprime cada nome de planilha no console.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 500);
var workbook = chart.ChartData.ChartDataWorkbook;
for (var i = 0; i < workbook.Worksheets.Count; i++)
{
Console.WriteLine(workbook.Worksheets[i].Name);
}
Especificar o Tipo de Fonte de Dados
Os valores dos pontos de série também podem ser armazenados diretamente como literais numéricos. Veja Definir Valores de Série Usando Literais Numéricos para um exemplo completo que os salva e os lê. O tipo de fonte dos valores dos pontos é separado da configuração interna ou externa da pasta de trabalho do gráfico; usar literais numéricos não remove, por si só, a pasta de trabalho incorporada.
Este exemplo cria um gráfico de colunas 3D com dados padrão e define dois nomes de série usando fontes de dados diferentes. O primeiro nome usa um literal de string; o segundo usa a célula C1 na planilha 0. A enumeração DataSourceType seleciona a fonte para cada nome. O exemplo salva a apresentação com os nomes de série atualizados.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Column3D, 50, 50, 600, 400, true);
var literalName = chart.ChartData.Series[0].Name;
literalName.DataSourceType = DataSourceType.StringLiterals;
literalName.Data = "LiteralString";
var cellName = chart.ChartData.Series[1].Name;
var nameCell = chart.ChartData.ChartDataWorkbook.GetCell(0, "C1", "NewCell");
cellName.DataSourceType = DataSourceType.Worksheet;
cellName.Data = nameCell;
presentation.Save("pres.pptx", SaveFormat.Pptx);
Detectar Formatos de Pasta de Trabalho Incorporados Não Suportados
Aspose.Slides não suporta o formato de pasta de trabalho binária do Excel (.xlsb) que pode ser incorporado em alguns gráficos. Você pode usar a propriedade EmbeddedWorkbookType em IChartData juntamente com a enumeração WorkbookType para detectar formatos não suportados e pular esses gráficos. Este exemplo inspeciona as formas no primeiro slide de uma apresentação existente, ignora formas que não são gráficos e imprime uma mensagem de diagnóstico para cada gráfico com uma pasta de trabalho .xlsb incorporada.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
foreach (var shape in slide.Shapes)
{
if (shape is not IChart chart)
{
continue;
}
var chartData = chart.ChartData;
var isInternalWorkbook = chartData.DataSourceType == ChartDataSourceType.InternalWorkbook;
var isBinaryMacro = chartData.EmbeddedWorkbookType == WorkbookType.WorkbookBinaryMacro;
if (isInternalWorkbook && isBinaryMacro)
{
Console.WriteLine("Skipping a chart with an unsupported .xlsb workbook.");
continue;
}
// Leia ou modifique os dados da pasta de trabalho de gráfico suportados aqui.
}
Pasta de Trabalho Externa
Aspose.Slides suporta o uso de pastas de trabalho externas como fonte de dados para gráficos.
Criar uma Pasta de Trabalho Externa
Use ReadWorkbookStream e SetExternalWorkbook para exportar uma pasta de trabalho de gráfico incorporada para um arquivo e vincular o gráfico a essa pasta de trabalho externa.
Este exemplo cria um gráfico de pizza com dados padrão e exporta sua pasta de trabalho. Ele fecha o stream de saída antes de atribuir a pasta de trabalho externa como fonte de dados do gráfico, depois salva a apresentação vinculada.
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 600);
var workbookPath = Path.GetFullPath("externalWorkbook1.xlsx");
using (var workbookStream = chart.ChartData.ReadWorkbookStream())
using (var fileStream = File.Create(workbookPath))
{
workbookStream.CopyTo(fileStream);
}
chart.ChartData.SetExternalWorkbook(workbookPath);
presentation.Save("externalWorkbook.pptx", SaveFormat.Pptx);
Definir uma Pasta de Trabalho Externa
Usando o método SetExternalWorkbook, você pode atribuir uma pasta de trabalho externa a um gráfico como sua fonte de dados. Esse método também pode ser usado para atualizar o caminho da pasta de trabalho externa (se a mesma tiver sido movida).
Embora não seja possível editar os dados em pastas de trabalho armazenadas em locais remotos ou recursos, ainda assim é possível usar essas pastas como fonte externa de dados. Se for fornecido um caminho relativo para uma pasta de trabalho externa, ele será convertido automaticamente para um caminho completo.
Este exemplo usa uma pasta de trabalho externa cuja planilha chamada Sheet1 contém um nome de série em B1, nomes de categoria em A2:A4 e valores numéricos em B2:B4. O exemplo cria um gráfico de pizza, vincula a pasta de trabalho e usa SetRange para mapear A1:B4 a uma série e três categorias. Ele salva a apresentação com o gráfico vinculado.
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 600, true);
var chartData = chart.ChartData;
var workbookPath = Path.GetFullPath("externalWorkbook.xlsx");
chartData.SetExternalWorkbook(workbookPath);
chartData.SetRange("Sheet1!$A$1:$B$4");
presentation.Save("Presentation_with_externalWorkbook.pptx", SaveFormat.Pptx);
O parâmetro updateChartData de SetExternalWorkbook controla se a pasta de trabalho é carregada.
- Quando
updateChartDataéfalse, apenas o caminho da pasta de trabalho é atualizado. Os dados do gráfico não são carregados ou atualizados a partir da pasta de trabalho de destino, de modo que a pasta de trabalho pode estar indisponível. - Quando
updateChartDataétrue, os dados do gráfico são atualizados a partir da pasta de trabalho de destino.
O exemplo a seguir atribui uma URL de espaço reservado com updateChartData definido como false. Ele mantém os dados padrão do gráfico de pizza e salva a apresentação sem carregar a pasta de trabalho indisponível.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 600, true);
chart.ChartData.SetExternalWorkbook("https://example.com/unavailable-workbook.xlsx", false);
presentation.Save("SetExternalWorkbookWithUpdateChartData.pptx", SaveFormat.Pptx);
Obter o Caminho da Pasta de Trabalho de Fonte de Dados Externa de um Gráfico
Para identificar a pasta de trabalho vinculada a um gráfico, verifique se o gráfico usa uma fonte de dados externa e recupere seu caminho de pasta de trabalho.
Este exemplo inspeciona o primeiro objeto no primeiro slide de uma apresentação com uma pasta de trabalho externa vinculada. Se for um gráfico vinculado a uma pasta de trabalho externa, o exemplo imprime ExternalWorkbookPath no console. Em seguida, salva uma cópia da apresentação.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("externalWorkbook.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var chartData = chart.ChartData;
if (chartData.DataSourceType == ChartDataSourceType.ExternalWorkbook)
{
Console.WriteLine(chartData.ExternalWorkbookPath);
}
else
{
Console.WriteLine("The chart does not use an external workbook.");
}
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
presentation.Save("Result.pptx", SaveFormat.Pptx);
Editar Dados do Gráfico
Você pode editar os dados em pastas de trabalho externas da mesma forma que altera o conteúdo de pastas de trabalho internas. Quando uma pasta de trabalho externa não pode ser carregada, uma exceção é lançada.
Este exemplo usa um gráfico que é o primeiro objeto no primeiro slide e está vinculado a uma pasta de trabalho externa acessível. Ele define o valor baseado em célula do primeiro ponto de dados da primeira série como 100 e salva a apresentação atualizada. Editar valores de célula pode atualizar o arquivo XLSX externo vinculado, portanto use uma cópia se precisar preservar a pasta de trabalho original.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var series = chart.ChartData.Series;
if (series.Count > 0 && series[0].DataPoints.Count > 0)
{
var valueCell = series[0].DataPoints[0].Value.AsCell;
if (valueCell != null)
{
valueCell.Value = 100;
presentation.Save("presentation_out.pptx", SaveFormat.Pptx);
}
else
{
Console.WriteLine("The first data point is not linked to a workbook cell.");
}
}
else
{
Console.WriteLine("The chart has no data points to edit.");
}
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
Atualizar Dados do Gráfico a partir de Pastas de Trabalho de Origem
Aspose.Slides for .NET 26.11 adiciona IChartData.RefreshData para um gráfico e IPresentation.RefreshChartsData para a apresentação. Use-os após alteração dos valores na pasta de trabalho de origem. As pastas de trabalho externas devem estar acessíveis e ser suportadas.
Com o Aspose.Slides for .NET 26.11 ou posterior instalado, este exemplo atualiza o primeiro gráfico no primeiro slide de charts.pptx. Sua pasta de trabalho de origem deve estar disponível. Salve o resultado para manter os dados de gráfico atualizados.
using System;
using System.Linq;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("charts.pptx");
var chart = presentation.Slides[0].Shapes.OfType<IChart>().FirstOrDefault();
if (chart == null)
{
Console.WriteLine("The first slide must contain a chart.");
return;
}
chart.ChartData.RefreshData();
presentation.Save("refreshed-chart.pptx", SaveFormat.Pptx);
Para atualizar todos os gráficos, use uma instância de apresentação separada da seguinte forma. Passar false faz com que uma falha na atualização seja propagada ao chamador; não desfaz os gráficos já atualizados.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("charts.pptx");
presentation.RefreshChartsData(skipFailedCharts: false);
presentation.Save("refreshed-charts.pptx", SaveFormat.Pptx);
O parâmetro padrão é true: RefreshChartsData ignora um gráfico que falhou e continua com os demais. Ele não retorna resultados por gráfico, portanto uma chamada concluída não prova que todos os gráficos foram atualizados. Use chamadas individuais de RefreshData se precisar identificar cada gráfico que falhou.
A atualização recarrega os dados de origem. É separada do cálculo de fórmulas, da validação de layout do gráfico e da atualização de uma pré‑visualização OLE. Inspecione valores ao vivo baseados em células para verificar a atualização na memória. Um CachedValue ainda pode descrever o gráfico salvo anteriormente até que você salve e reabra a apresentação.
Ler Valores em Cache do Gráfico sem uma Pasta de Trabalho
No .NET 26.11, os acessores de valores em cache leem os valores armazenados com o gráfico sem abrir sua pasta de trabalho. São úteis quando o arquivo vinculado está indisponível e você precisa apenas dos últimos dados armazenados do gráfico. Isso difere de reconstruir uma pasta de trabalho usando a opção de recuperação abaixo.
| Objeto | Acessor em cache |
|---|---|
| Ponto de série comum | CachedValue |
| Ponto de dispersão ou bolha | CachedXValue, CachedYValue |
| Ponto de bolha | CachedBubbleSize |
| Categoria do gráfico | CachedValue |
Cada acessor retorna ICachedChartValue. Data expõe o objeto armazenado; ToString fornece texto; ToDouble retorna NaN para um valor ausente ou não numérico. Um cache pode estar ausente ou desatualizado, inclusive em um gráfico recém‑criado que ainda não foi salvo. Não presuma que todo campo exista ou contenha um número.
Este exemplo lê todos esses campos de cached-chart.pptx, uma apresentação salva que contém gráficos. Uma pasta de trabalho externa ausente é aceitável porque o código não acessa ChartDataWorkbook nem células ao vivo da pasta de trabalho.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("cached-chart.pptx");
foreach (var slide in presentation.Slides)
foreach (var shape in slide.Shapes)
{
if (shape is not IChart chart)
continue;
foreach (var category in chart.ChartData.Categories)
PrintCache("Category", category.CachedValue);
foreach (var series in chart.ChartData.Series)
foreach (var point in series.DataPoints)
{
PrintCache("Value", point.CachedValue);
PrintCache("X", point.CachedXValue);
PrintCache("Y", point.CachedYValue);
PrintCache("Bubble size", point.CachedBubbleSize);
}
}
static void PrintCache(string name, ICachedChartValue value)
{
var number = value.ToDouble();
if (value.Data == null)
Console.WriteLine($"{name}: no cached value");
else if (double.IsNaN(number))
Console.WriteLine($"{name}: {value} (not numeric)");
else
Console.WriteLine($"{name}: {number}");
}
Use a atualização quando precisar de dados de origem atuais; use leituras em cache quando a captura armazenada for suficiente. O cache não é uma cópia completa da pasta de trabalho e não pode fornecer alterações feitas depois da última atualização.
Recuperar uma Pasta de Trabalho a partir do Cache do Gráfico
Se um gráfico usar uma pasta de trabalho externa que esteja ausente ou indisponível, Aspose.Slides pode reconstruir a pasta de trabalho do gráfico a partir dos dados em cache na apresentação. Crie LoadOptions, configure suas SpreadsheetOptions, e defina ISpreadsheetOptions.RecoverWorkbookFromChartCache como true antes de abrir a apresentação.
O exemplo C# a seguir recupera dados da pasta de trabalho para um gráfico que é o primeiro objeto no primeiro slide e referencia uma pasta de trabalho externa indisponível. Ele acessa os dados recuperados através de IChart.ChartData e IChartData.ChartDataWorkbook:
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
var spreadsheetOptions = new SpreadsheetOptions
{
RecoverWorkbookFromChartCache = true
};
var loadOptions = new LoadOptions
{
SpreadsheetOptions = spreadsheetOptions
};
using var presentation = new Presentation("presentation.pptx", loadOptions);
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var recoveredWorkbook = chart.ChartData.ChartDataWorkbook;
// Leia ou modifique os dados da pasta de trabalho recuperada aqui.
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
Se o código acessar a pasta de trabalho externa enquanto ela estiver indisponível e a recuperação estiver desabilitada, Aspose.Slides lançará uma InvalidOperationException. Habilite a recuperação somente quando o uso dos dados de gráfico em cache for uma alternativa aceitável, pois o cache pode não conter alterações feitas na pasta de trabalho externa após a última atualização da apresentação.
Perguntas Frequentes
Posso determinar se um gráfico específico está vinculado a uma pasta de trabalho externa ou incorporada?
Sim. Um gráfico possui um data source type e um path to an external workbook; se a fonte for uma pasta de trabalho externa, você pode ler o caminho completo para garantir que um arquivo externo está sendo usado.
Os caminhos relativos para pastas de trabalho externas são suportados e como eles são armazenados?
Sim. Se você especificar um caminho relativo, ele será convertido automaticamente em um caminho absoluto. A apresentação armazena o caminho absoluto no arquivo PPTX, portanto mover a pasta de trabalho pode exigir a atualização do link.
Posso usar pastas de trabalho localizadas em recursos/redes?
Sim, essas pastas de trabalho podem ser usadas como fonte externa de dados. No entanto, a edição direta de pastas de trabalho remotas a partir do Aspose.Slides não é suportada—elas podem ser usadas apenas como fonte.
O Aspose.Slides sobrescreve o XLSX externo ao salvar a apresentação?
A apresentação armazena um link to the external file. Editar dados de gráfico baseados em célula também pode atualizar o arquivo XLSX local vinculado. Use uma cópia da pasta de trabalho se o original precisar permanecer inalterado.
O que devo fazer se o arquivo externo estiver protegido por senha?
Aspose.Slides não aceita senha ao vincular. Uma abordagem comum é remover a proteção antecipadamente ou preparar uma cópia descriptografada (por exemplo, usando Aspose.Cells) e vincular a essa cópia.
Vários gráficos podem fazer referência à mesma pasta de trabalho externa?
Sim. Cada gráfico armazena seu próprio link. Se todos apontarem para o mesmo arquivo, a atualização desse arquivo será refletida em cada gráfico na próxima carga dos dados.

