Creare grafici usando VSTO e Aspose.Slides per .NET

Panoramica

Questo articolo dimostra come creare e personalizzare grafici nelle presentazioni Microsoft PowerPoint in modo programmatico usando C#. Con Aspose.Slides per .NET, è possibile automatizzare la generazione di grafici professionali e basati sui dati senza fare affidamento su Microsoft Office o sulle librerie Interop. L’API fornisce un ricco insieme di funzionalità per creare grafici a colonne, a torta, a linee e altro ancora — il tutto con pieno controllo su aspetto, dati e layout. Che si stiano generando report, dashboard o presentazioni aziendali, Aspose.Slides ti consente di fornire visualizzazioni di alta qualità direttamente dalle tue applicazioni .NET.

Esempio VSTO

Questa sezione dimostra come creare un grafico in una presentazione Microsoft PowerPoint usando VSTO (Visual Studio Tools for Office). Con VSTO, è possibile generare e personalizzare programmaticamente i grafici combinando l’automazione di PowerPoint e Excel. L’esempio fornito mostra come aggiungere un grafico a colonne raggruppate 3D, popolarlo con dati da un foglio di lavoro Excel, regolare la formattazione e il layout, e salvare la presentazione finale — il tutto all’interno di un’applicazione .NET.

  1. Crea un’istanza di una presentazione Microsoft PowerPoint.
  2. Aggiungi una diapositiva vuota alla presentazione.
  3. Aggiungi un grafico a colonne raggruppate 3D e accedilo.
  4. Crea una nuova istanza di cartella di lavoro Microsoft Excel e carica i dati del grafico.
  5. Accedi al foglio di dati del grafico usando l’istanza della cartella di lavoro Excel.
  6. Imposta l’intervallo del grafico nel foglio di lavoro e rimuovi le serie 2 e 3 dal grafico.
  7. Modifica i dati delle categorie del grafico nel foglio di dati del grafico.
  8. Modifica i dati della serie 1 nel foglio di dati del grafico.
  9. Accedi al titolo del grafico e imposta le sue proprietà relative al carattere.
  10. Accedi all’asse dei valori del grafico e imposta l’unità principale, l’unità secondaria, il valore massimo e il valore minimo.
  11. Accedi all’asse di profondità (serie) del grafico e rimuovilo — in questo esempio è utilizzata una sola serie.
  12. Imposta gli angoli di rotazione del grafico nelle direzioni X e Y.
  13. Salva la presentazione.
  14. Chiudi le istanze di Microsoft Excel e PowerPoint.
EnsurePowerPointIsRunning(true, true);

// Istanziare un oggetto slide.
Microsoft.Office.Interop.PowerPoint.Slide objSlide = null;

// Accedere alla prima slide della presentazione.
objSlide = objPres.Slides[1];

// Selezionare la prima slide e impostarne il layout.
objSlide.Select();
objSlide.Layout = Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutBlank;

// Aggiungere un grafico predefinito alla slide.
objSlide.Shapes.AddChart(Microsoft.Office.Core.XlChartType.xl3DColumn, 20, 30, 400, 300);

// Accedere al grafico aggiunto.
Microsoft.Office.Interop.PowerPoint.Chart ppChart = objSlide.Shapes[1].Chart;

// Accedere ai dati del grafico.
Microsoft.Office.Interop.PowerPoint.ChartData chartData = ppChart.ChartData;

// Creare un'istanza della cartella di lavoro Excel per lavorare con i dati del grafico.
Microsoft.Office.Interop.Excel.Workbook dataWorkbook = (Microsoft.Office.Interop.Excel.Workbook)chartData.Workbook;

// Accedere al foglio di lavoro dei dati per il grafico.
Microsoft.Office.Interop.Excel.Worksheet dataSheet = dataWorkbook.Worksheets[1];

// Impostare l'intervallo di dati per il grafico.
Microsoft.Office.Interop.Excel.Range tRange = dataSheet.Cells.get_Range("A1", "B5");

// Applicare l'intervallo specificato alla tabella dei dati del grafico.
Microsoft.Office.Interop.Excel.ListObject tbl1 = dataSheet.ListObjects["Table1"];
tbl1.Resize(tRange);

// Impostare i valori per le categorie e i dati delle rispettive serie.
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A2"))).FormulaR1C1 = "Bikes";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A3"))).FormulaR1C1 = "Accessories";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A4"))).FormulaR1C1 = "Repairs";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A5"))).FormulaR1C1 = "Clothing";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B2"))).FormulaR1C1 = "1000";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B3"))).FormulaR1C1 = "2500";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B4"))).FormulaR1C1 = "4000";
((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B5"))).FormulaR1C1 = "3000";

// Impostare il titolo del grafico.
ppChart.ChartTitle.Font.Italic = true;
ppChart.ChartTitle.Text = "2007 Sales";
ppChart.ChartTitle.Font.Size = 18;
ppChart.ChartTitle.Font.Color = Color.Black.ToArgb();
ppChart.ChartTitle.Format.Line.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
ppChart.ChartTitle.Format.Line.ForeColor.RGB = Color.Black.ToArgb();

// Accedere all'asse dei valori del grafico.
Microsoft.Office.Interop.PowerPoint.Axis valaxis = ppChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlValue, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

// Impostare i valori per le unità dell'asse.
valaxis.MajorUnit = 2000.0F;
valaxis.MinorUnit = 1000.0F;
valaxis.MinimumScale = 0.0F;
valaxis.MaximumScale = 4000.0F;

// Accedere all'asse di profondità del grafico.
Microsoft.Office.Interop.PowerPoint.Axis Depthaxis = ppChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlSeriesAxis, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);
Depthaxis.Delete();

// Impostare la rotazione del grafico.
ppChart.Rotation = 20;   // Valore Y
ppChart.Elevation = 15;  // Valore X
ppChart.RightAngleAxes = false;

// Salvare la presentazione come file PPTX.
objPres.SaveAs("VSTO_Sample_Chart.pptx", Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);

// Chiudere la cartella di lavoro e la presentazione.
dataWorkbook.Application.Quit();
objPres.Application.Quit();
public static void EnsurePowerPointIsRunning(bool blnAddPresentation)
{
    EnsurePowerPointIsRunning(blnAddPresentation, false);
}

public static void EnsurePowerPointIsRunning()
{
    EnsurePowerPointIsRunning(false, false);
}

public static void EnsurePowerPointIsRunning(bool blnAddPresentation, bool blnAddSlide)
{
    string strName = null;

    // Provare ad accedere alla proprietà Name. Se genera un'eccezione, avviare una nuova istanza di PowerPoint.
    try
    {
        strName = objPPT.Name;
    }
    catch (Exception ex)
    {
        StartPowerPoint();
    }

    // blnAddPresentation viene usato per garantire che una presentazione sia caricata.
    if (blnAddPresentation == true)
    {
        try
        {
            strName = objPres.Name;
        }
        catch (Exception ex)
        {
            objPres = objPPT.Presentations.Add(MsoTriState.msoTrue);
        }
    }

    // blnAddSlide viene usato per garantire che ci sia almeno una slide nella presentazione.
    if (blnAddSlide)
    {
        try
        {
            strName = objPres.Slides[1].Name;
        }
        catch (Exception ex)
        {
            Microsoft.Office.Interop.PowerPoint.Slide objSlide = null;
            Microsoft.Office.Interop.PowerPoint.CustomLayout objCustomLayout = null;
            objCustomLayout = objPres.SlideMaster.CustomLayouts[1];
            objSlide = objPres.Slides.AddSlide(1, objCustomLayout);
            objSlide.Layout = Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText;
            objCustomLayout = null;
            objSlide = null;
        }
    }
}

Il risultato:

Il grafico creato con VSTO

Esempio Aspose.Slides per .NET

L’esempio seguente mostra come creare un grafico semplice in una presentazione PowerPoint usando Aspose.Slides per .NET. Questo codice dimostra come aggiungere un grafico a colonne raggruppate 3D, popolarlo con dati di esempio e personalizzarne l’aspetto. Con poche righe di codice, è possibile generare grafici in modo dinamico e integrarli nelle presentazioni senza utilizzare Microsoft Office.

  1. Crea un’istanza della classe Presentation.
  2. Ottieni un riferimento alla prima diapositiva.
  3. Aggiungi un grafico a colonne raggruppate 3D e accedilo.
  4. Accedi ai dati del grafico.
  5. Rimuovi le serie 2 e 3 inutilizzate.
  6. Modifica le categorie del grafico aggiornando le etichette.
  7. Aggiorna i valori della serie 1.
  8. Accedi al titolo del grafico e imposta le sue proprietà del carattere.
  9. Configura l’asse dei valori del grafico, includendo l’unità principale, l’unità secondaria, i valori massimo e minimo.
  10. Imposta gli angoli di rotazione del grafico sugli assi X e Y.
  11. Salva la presentazione in formato PPTX.
// Crea una presentazione vuota.
using (Presentation presentation = new Presentation())
{
    // Accedi alla prima diapositiva.
    ISlide slide = presentation.Slides[0];

    // Aggiungi un grafico predefinito.
    IChart chart = slide.Shapes.AddChart(ChartType.ClusteredColumn3D, 20, 30, 400, 300);

    // Ottieni i dati del grafico.
    IChartData chartData = chart.ChartData;

    // Rimuovi le serie predefinite aggiuntive.
    chartData.Series.RemoveAt(1);
    chartData.Series.RemoveAt(1);

    // Modifica i nomi delle categorie del grafico.
    chartData.Categories[0].AsCell.Value = "Bikes";
    chartData.Categories[1].AsCell.Value = "Accessories";
    chartData.Categories[2].AsCell.Value = "Repairs";
    chartData.Categories[3].AsCell.Value = "Clothing";

    // Imposta l'indice del foglio di lavoro dei dati del grafico.
    int worksheetIndex = 0;

    // Ottieni la cartella di lavoro dei dati del grafico.
    IChartDataWorkbook workbook = chart.ChartData.ChartDataWorkbook;

    // Modifica i valori delle serie del grafico.
    chartData.Series[0].DataPoints.AddDataPointForBarSeries(workbook.GetCell(worksheetIndex, 1, 1, 1000));
    chartData.Series[0].DataPoints.AddDataPointForBarSeries(workbook.GetCell(worksheetIndex, 2, 1, 2500));
    chartData.Series[0].DataPoints.AddDataPointForBarSeries(workbook.GetCell(worksheetIndex, 3, 1, 4000));
    chartData.Series[0].DataPoints.AddDataPointForBarSeries(workbook.GetCell(worksheetIndex, 4, 1, 3000));

    // Imposta il titolo del grafico.
    chart.HasTitle = true;
    chart.ChartTitle.AddTextFrameForOverriding("2007 Sales");
    IPortionFormat format = chart.ChartTitle.TextFrameForOverriding.Paragraphs[0].Portions[0].PortionFormat;
    format.FontItalic = NullableBool.True;
    format.FontHeight = 18;
    format.FillFormat.FillType = FillType.Solid;
    format.FillFormat.SolidFillColor.Color = Color.Black;

    // Imposta le opzioni dell'asse.
    chart.Axes.VerticalAxis.IsAutomaticMaxValue = false;
    chart.Axes.VerticalAxis.IsAutomaticMinValue = false;
    chart.Axes.VerticalAxis.IsAutomaticMajorUnit = false;
    chart.Axes.VerticalAxis.IsAutomaticMinorUnit = false;

    chart.Axes.VerticalAxis.MaxValue = 4000.0F;
    chart.Axes.VerticalAxis.MinValue = 0.0F;
    chart.Axes.VerticalAxis.MajorUnit = 2000.0F;
    chart.Axes.VerticalAxis.MinorUnit = 1000.0F;
    chart.Axes.VerticalAxis.TickLabelPosition = TickLabelPositionType.NextTo;

    // Imposta la rotazione del grafico.
    chart.Rotation3D.RotationX = 15;
    chart.Rotation3D.RotationY = 20;

    // Salva la presentazione come file PPTX.
    presentation.Save("Aspose_Sample_Chart.pptx", SaveFormat.Pptx);
}

Il risultato:

Il grafico creato con Aspose.Slides per .NET

FAQ

Posso creare altri tipi di grafici come a torta, a linee o a barre con Aspose.Slides?

Sì. Aspose.Slides per .NET supporta un’ampia gamma di tipi di grafico, tra cui grafici a torta, grafici a linee, grafici a barre, diagrammi a dispersione, grafici a bolle e altro. È possibile specificare il tipo di grafico desiderato utilizzando l’enumerazione ChartType quando si aggiunge un grafico.

Posso applicare stili o temi personalizzati al grafico?

Sì. È possibile personalizzare completamente l’aspetto del grafico, inclusi colori, caratteri, riempimenti, contorni, linee di griglia e layout. Tuttavia, l’applicazione di temi di Office esattamente come visualizzati in PowerPoint richiede l’impostazione manuale dei singoli stili.

Posso esportare il grafico come immagine separatamente dalla diapositiva?

Sì, Aspose.Slides consente di esportare qualsiasi forma — inclusi i grafici — come immagine separata (ad esempio PNG, JPEG) utilizzando il metodo GetImage sulla shape del grafico.