none
Transférer un graphique Excel dans C# RRS feed

  • Question

  • Voici la routine suivante:

            // Initialisation
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;
    
            xlApp = new Excel.ApplicationClass();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet) xlWorkBook.Worksheets.get_Item(1);
    
            // Préparer les données
            xlWorkSheet.Cells[1, 1] = "";
            xlWorkSheet.Cells[1, 2] = "Étudiant 1";
            xlWorkSheet.Cells[1, 3] = "Étudiant 2";
            xlWorkSheet.Cells[1, 4] = "Étudiant 3";
    
            xlWorkSheet.Cells[2, 1] = "Terme 1";
            xlWorkSheet.Cells[2, 2] = "80";
            xlWorkSheet.Cells[2, 3] = "65";
            xlWorkSheet.Cells[2, 4] = "45";
    
            xlWorkSheet.Cells[3, 1] = "Terme 2";
            xlWorkSheet.Cells[3, 2] = "78";
            xlWorkSheet.Cells[3, 3] = "72";
            xlWorkSheet.Cells[3, 4] = "60";
    
            xlWorkSheet.Cells[4, 1] = "Terme 3";
            xlWorkSheet.Cells[4, 2] = "82";
            xlWorkSheet.Cells[4, 3] = "80";
            xlWorkSheet.Cells[4, 4] = "65";
    
            xlWorkSheet.Cells[5, 1] = "Terme 4";
            xlWorkSheet.Cells[5, 2] = "75";
            xlWorkSheet.Cells[5, 3] = "82";
            xlWorkSheet.Cells[5, 4] = "68";
    
            // Initialisation du graphique
            Excel.Range chartRange;
    
            Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
            Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
            Excel.Chart chartPage = myChart.Chart;
    
            chartRange = xlWorkSheet.get_Range("A1", "D5");
            chartPage.SetSourceData(chartRange, misValue);
            chartPage.ChartType = Excel.XlChartType.xlColumnClustered;
    
            // Transfert de l'image
            chartPage.CopyPicture();
            var getImage = Clipboard.GetImage();
            picGraphiqueTempsArrêt.Image = new Bitmap(getImage);
    
            // Fermeture Excel
            xlWorkBook.Close(false, misValue, misValue);
            xlApp.Quit();
    
            // Terminaison
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet);
            xlWorkSheet = null;
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkBook);
            xlWorkBook = null;
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp);
            xlApp = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
    

    Je suis en mesure de copier le graphique généré manuellement dans Paint mais pas dans le programme C#.

            var getImage = Clipboard.GetImage();
    

    getImage contient «null» comme résultat alors que le presse-papier contient le graphique désiré.

    Suggestions?


    Luc Saucier

    jeudi 14 mars 2013 13:51

Réponses

  • Vous pouvez convertir le type MetaFilePict en Image:

    Image image = (Image)data.GetData(DataFormats.MetafilePict);

    Ou bien:

    Image image = (Image)data.GetData(DataFormats.EnhancedMetafile);



    Sami CHNITER Software Engineer

    • Proposé comme réponse Sami CHNITER mercredi 20 mars 2013 18:48
    • Marqué comme réponse Aurel Bera jeudi 21 mars 2013 08:08
    jeudi 14 mars 2013 19:23

Toutes les réponses