Criar Gráficos do Excel e Incorporá-los em Apresentações como Objetos OLE
Contexto
No PowerPoint, usar gráficos editáveis para exibir dados graficamente é uma prática comum. O Aspose oferece suporte à criação de gráficos do Excel com Aspose.Cells for Python via Java, e esses gráficos podem ser incorporados como objetos OLE em slides do PowerPoint através do Aspose.Slides for Python via Java. Este artigo aborda as etapas necessárias e fornece um exemplo de código Python para criar um gráfico do Excel e incorporá‑lo como objeto OLE em uma apresentação PowerPoint usando Aspose.Cells e Aspose.Slides.
Etapas Necessárias
A sequência de etapas a seguir é necessária para criar e incorporar um gráfico do Excel como objeto OLE em um slide do PowerPoint:
- Criar um gráfico do Excel usando Aspose.Cells.
- Definir o tamanho OLE do gráfico do Excel usando Aspose.Cells.
- Obter uma imagem do gráfico do Excel com Aspose.Cells.
- Incorporar o gráfico do Excel como objeto OLE em uma apresentação PPTX usando Aspose.Slides.
- Substituir a imagem “EMBEDDED OLE OBJECT” pela imagem obtida na etapa 3 para resolver o problema de visualização do objeto.
- Salvar a apresentação no disco no formato PPTX.
Implementação das Etapas Necessárias
A implementação em Python das etapas acima é a seguinte:
import jpype
import asposecells
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposecells.api import Workbook, ChartType, SheetType, ImageOrPrintOptions, ImageType
from asposecells.api import SaveFormat as CellsSaveFormat
from asposeslides.api import OleEmbeddedDataInfo, Presentation, SaveFormat
ByteArrayOutputStream = jpype.JClass("java.io.ByteArrayOutputStream")
def add_excel_chart_in_workbook(workbook, chart_rows, chart_columns):
# Uma matriz de nomes de células.
cell_names = [
"A1", "A2", "A3", "A4",
"B1", "B2", "B3", "B4",
"C1", "C2", "C3", "C4",
"D1", "D2", "D3", "D4",
"E1", "E2", "E3", "E4",
]
# Uma matriz de dados de células.
cell_values = [
67, 86, 68, 91,
44, 64, 89, 48,
46, 97, 78, 60,
43, 29, 69, 26,
24, 40, 38, 25,
]
# Adicionar uma nova planilha para preencher células com dados.
data_sheet_index = workbook.getWorksheets().add()
data_sheet = workbook.getWorksheets().get(data_sheet_index)
sheet_name = "DataSheet"
data_sheet.setName(sheet_name)
# Preencher a planilha de dados com valores.
for cell_name, cell_value in zip(cell_names, cell_values):
data_sheet.getCells().get(cell_name).setValue(jpype.JInt(cell_value))
# Adicionar uma planilha de gráfico.
worksheet_index = workbook.getWorksheets().add(SheetType.CHART)
chart_sheet = workbook.getWorksheets().get(worksheet_index)
chart_sheet.setName("ChartSheet")
chart_sheet_index = chart_sheet.getIndex()
# Adicionar um gráfico à planilha de gráfico com séries de dados da planilha de dados.
chart_index = chart_sheet.getCharts().add(ChartType.COLUMN, 0, chart_rows, 0, chart_columns)
chart = chart_sheet.getCharts().get(chart_index)
chart.getNSeries().add(sheet_name + "!A1:E1", False)
chart.getNSeries().add(sheet_name + "!A2:E2", False)
chart.getNSeries().add(sheet_name + "!A3:E3", False)
chart.getNSeries().add(sheet_name + "!A4:E4", False)
# Definir a planilha de gráfico como a planilha ativa.
workbook.getWorksheets().setActiveSheetIndex(chart_sheet_index)
return chart_sheet_index
def add_excel_chart_in_presentation(presentation, slide, workbook_data, chart_image):
ole_height = jpype.JFloat(presentation.getSlideSize().getSize().getHeight())
ole_width = jpype.JFloat(presentation.getSlideSize().getSize().getWidth())
# Descrever a pasta de trabalho como dados OLE incorporados.
data_info = OleEmbeddedDataInfo(workbook_data, "xls")
ole_frame = slide.getShapes().addOleObjectFrame(0.0, 0.0, ole_width, ole_height, data_info)
image = presentation.getImages().addImage(chart_image)
ole_frame.getSubstitutePictureFormat().getPicture().setImage(image)
# Criar uma pasta de trabalho.
workbook = Workbook()
# Adicionar um gráfico do Excel.
chart_rows = 55
chart_columns = 25
chart_sheet_index = add_excel_chart_in_workbook(workbook, chart_rows, chart_columns)
# Definir o tamanho OLE do gráfico.
workbook.getWorksheets().setOleSize(0, chart_rows, 0, chart_columns)
# Obter a imagem do gráfico e salvá‑la em um fluxo.
print_options = ImageOrPrintOptions()
print_options.setImageType(ImageType.PNG)
image_stream = ByteArrayOutputStream()
workbook.getWorksheets().get(chart_sheet_index).getCharts().get(0).toImage(image_stream, print_options)
chart_image = image_stream.toByteArray()
# Salvar a pasta de trabalho em um fluxo.
workbook_stream = ByteArrayOutputStream()
workbook.save(workbook_stream, CellsSaveFormat.EXCEL_97_TO_2003)
workbook_data = workbook_stream.toByteArray()
# Criar uma apresentação.
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
# Adicionar a pasta de trabalho a um slide.
add_excel_chart_in_presentation(presentation, slide, workbook_data, chart_image)
# Salvar a apresentação no disco.
presentation.save("OutputChart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
A apresentação criada pelo método acima conterá o gráfico do Excel como objeto OLE que pode ser ativado ao dar duplo‑clique no quadro do objeto OLE.
Conclusão
Usando Aspose.Cells for Python via Java juntamente com Aspose.Slides for Python via Java, podemos criar qualquer gráfico do Excel suportado pelo Aspose.Cells e incorporá‑lo como objeto OLE em um slide do PowerPoint. O tamanho OLE do gráfico do Excel também pode ser definido. Os usuários finais podem então editar o gráfico do Excel como qualquer outro objeto OLE.
Seções Relacionadas
- Solução Funcional para Redimensionamento de Gráficos em PPTX
- Problema de Visualização de Objeto ao Adicionar OleObjectFrame
FAQ
Quais bibliotecas são usadas para criar e incorporar o gráfico do Excel?
Aspose.Cells for Python via Java cria o gráfico do Excel, e Aspose.Slides for Python via Java o incorpora como objeto OLE em um slide do PowerPoint.
Como os usuários podem editar o gráfico do Excel incorporado?
Os usuários podem dar duplo‑clique no quadro do objeto OLE para ativar o gráfico e editá‑lo como qualquer outro objeto OLE.
Como a visualização padrão do objeto OLE é substituída?
O exemplo obtém uma imagem do gráfico do Excel com Aspose.Cells e a usa para substituir a imagem “EMBEDDED OLE OBJECT”.