Gerenciar workbooks de gráficos em apresentações com Python
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áfico por meio 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 origem de dados para os valores do gráfico.
Também aborda o trabalho com pastas de trabalho externas como fontes de dados de 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.
Ler e gravar dados de gráfico a partir de uma pasta de trabalho
Aspose.Slides fornece métodos para ler e gravar pastas de trabalho de dados de gráfico (que contêm dados de gráfico editados com Aspose.Cells). Nota: Os dados do gráfico devem estar organizados da mesma forma ou ter uma estrutura semelhante à origem.
The following Python code demonstrates a sample operation:
import aspose.slides as slides
with slides.Presentation("chart.pptx") as presentation:
chart = presentation.slides[0].shapes[0]
data_stream = chart.chart_data.read_workbook_stream()
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
data_stream.seek(0)
chart.chart_data.write_workbook_stream(data_stream)
Definir uma célula de Workbook como rótulo de dados de gráfico
Às vezes é necessário que os rótulos do gráfico venham diretamente das células na pasta de trabalho de dados subjacente. Aspose.Slides permite vincular rótulos de dados a células específicas da pasta de trabalho, de modo que o texto do rótulo reflita sempre o valor da célula. O exemplo abaixo mostra como habilitar rótulos de valor a partir de célula e apontar rótulos selecionados para células personalizadas na pasta de trabalho do gráfico.
- Crie uma instância da classe Presentation.
- Obtenha uma referência ao slide pelo índice.
- Adicione um gráfico de bolhas com dados de exemplo.
- Acesse a série do gráfico.
- Use uma célula de workbook como rótulo de dados.
- Salve a apresentação.
The following Python code shows how to set a workbook cell as a chart data label:
import aspose.slides as slides
import aspose.slides.charts as charts
# Instanciar a classe Presentation que representa um arquivo de apresentação.
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.BUBBLE, 50, 50, 600, 400, True)
series = chart.chart_data.series[0]
series.labels.default_data_label_format.show_label_value_from_cell = True
workbook = chart.chart_data.chart_data_workbook
series.labels[0].value_from_cell = workbook.get_cell(0, "A10", "Label 0")
series.labels[1].value_from_cell = workbook.get_cell(0, "A11", "Label 1")
series.labels[2].value_from_cell = workbook.get_cell(0, "A12", "Label 2")
presentation.save("chart.pptx", slides.export.SaveFormat.PPTX)
Gerenciar planilhas
O código Python a seguir demonstra como usar a propriedade worksheets para acessar a coleção de planilhas:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 500)
workbook = chart.chart_data.chart_data_workbook
for i in range(len(workbook.worksheets)):
print(workbook.worksheets[i].name)
Especificar o tipo de origem de dados
O código Python a seguir mostra como especificar um tipo de origem de dados:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.COLUMN_3D, 50, 50, 600, 400, True)
series_name = chart.chart_data.series[0].name
series_name.data_source_type = slides.charts.DataSourceType.STRING_LITERALS
series_name.data = "LiteralString"
series_name = chart.chart_data.series[1].name
series_name.data = chart.chart_data.chart_data_workbook.get_cell(0, "B1", "NewCell")
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Detectar formatos de workbook incorporados não suportados
Aspose.Slides não oferece suporte ao formato de workbook binário do Excel (.xlsb) que pode ser incorporado em alguns gráficos. Você pode usar a propriedade embedded_workbook_type em ChartData juntamente com a enumeração WorkbookType para detectar formatos não suportados e ignorar esses gráficos.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if not isinstance(shape, charts.Chart):
continue
chart = shape
chart_data = chart.chart_data
if (chart_data.data_source_type == charts.ChartDataSourceType.INTERNAL_WORKBOOK and
chart_data.embedded_workbook_type == charts.WorkbookType.WORKBOOK_BINARY_MACRO):
# O workbook incorporado está no formato .xlsb, que não é suportado.
continue
# Leia ou modifique os dados do workbook do gráfico aqui.
Workbooks externos
Aspose.Slides oferece suporte ao uso de workbooks externos como fonte de dados para gráficos.
Definir workbooks externos
Usando o método ChartData.set_external_workbook, você pode atribuir um workbook externo a um gráfico como sua fonte de dados. Esse método também pode atualizar o caminho para um workbook externo se ele tiver sido movido.
Embora não seja possível editar dados em workbooks armazenados em locais remotos ou recursos, ainda é possível usar esses workbooks como fontes de dados externas. Se você fornecer um caminho relativo para um workbook externo, ele será convertido automaticamente em um caminho completo.
The following Python code shows how to set an external workbook:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 600, False)
chart.chart_data.set_external_workbook("external_workbook.xlsx")
presentation.save("chart_with_external_workbook.pptx", slides.export.SaveFormat.PPTX)
O parâmetro update_chart_data do método set_external_workbook especifica se o workbook do Excel será carregado.
- Quando
update_chart_dataestá definido comoFalse, apenas o caminho do workbook é atualizado; os dados do gráfico não são carregados ou atualizados a partir do workbook de destino. Use essa configuração quando o workbook de destino não existir ou estiver indisponível. - Quando
update_chart_dataestá definido comoTrue, os dados do gráfico são carregados e atualizados a partir do workbook de destino.
Criar workbooks externos
Usando os métodos read_workbook_stream e set_external_workbook, você pode criar um workbook externo do zero ou converter um workbook interno em um externo.
This Python code demonstrates the external workbook creation process:
import pathlib
import aspose.slides as slides
import aspose.slides.charts as charts
workbook_path = "external_workbook.xlsx"
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 600)
workbook_data = chart.chart_data.read_workbook_stream().read()
with open(workbook_path, "wb") as file_stream:
file_stream.write(workbook_data)
full_path = str(pathlib.Path(workbook_path).resolve())
chart.chart_data.set_external_workbook(full_path)
presentation.save("chart_with_external_workbook.pptx", slides.export.SaveFormat.PPTX)
Obter o caminho do workbook da fonte de dados externa para um gráfico
Às vezes os dados de um gráfico estão vinculados a um workbook Excel externo em vez dos dados incorporados da apresentação. Com Aspose.Slides, você pode inspecionar a fonte de dados do gráfico e, se for um workbook externo, ler o caminho completo do workbook.
- Crie uma instância da classe Presentation.
- Obtenha uma referência ao slide pelo seu índice.
- Obtenha uma referência ao shape do gráfico.
- Obtenha a fonte (ChartDataSourceType) que representa a fonte de dados do gráfico.
- Verifique se o tipo de fonte corresponde ao tipo de fonte de dados de workbook externo.
The following Python code demonstrates the operation:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("chart_with_external_workbook.pptx") as presentation:
chart = presentation.slides[0].shapes[0]
source_type = chart.chart_data.data_source_type
if source_type == charts.ChartDataSourceType.EXTERNAL_WORKBOOK:
print(chart.chart_data.external_workbook_path)
Editar dados do gráfico
Você pode editar dados em workbooks externos da mesma forma que edita dados em workbooks internos. Se um workbook externo não puder ser carregado, uma exceção será lançada.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
chart = presentation.slides[0].shapes[0]
chart.chart_data.series[0].data_points[0].value.as_cell.value = 100
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Perguntas frequentes
Posso determinar se um gráfico específico está vinculado a um workbook externo ou incorporado?
Sim. Um gráfico possui um data source type e um path to an external workbook; se a fonte for um workbook externo, você pode ler o caminho completo para garantir que um arquivo externo está sendo usado.
Caminhos relativos para workbooks externos são suportados, e como eles são armazenados?
Sim. Se você especificar um caminho relativo, ele será convertido automaticamente em um caminho absoluto. Isso é conveniente para portabilidade do projeto; entretanto, esteja ciente de que a apresentação armazenará o caminho absoluto no arquivo PPTX.
Posso usar workbooks localizados em recursos/compartilhamentos de rede?
Sim, esses workbooks podem ser usados como fonte de dados externa. Porém, a edição de workbooks remotos diretamente pelo Aspose.Slides não é suportada — eles podem ser usados apenas como origem.
O Aspose.Slides sobrescreve o XLSX externo ao salvar a apresentação?
Não. A apresentação armazena um link to the external file e o utiliza para ler os dados. O arquivo externo em si não é modificado quando a apresentação é salva.
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 referenciar o mesmo workbook externo?
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 vez que os dados forem carregados.