2017-03-16 3 views
0

interop Excel을 사용하여 Excel 파일로 차트를 만듭니다.시리즈 차트의 값 설정 (Interop Excel)

내가 차트를 만들고 일련의 값을 첫 번째 시간에 설정할 때 나는 아무런 문제가 없습니다.

두 번째로 오류가 발생했습니다.

나는이 문제를 재현하는 POC 만들었습니다

using System; 
using System.Linq; 
using System.Runtime.InteropServices; 
using Excel = Microsoft.Office.Interop.Excel; 

namespace POC_Excel 
{ 
    static class Program 
    { 
     static void Main(string[] args) 
     { 
      Excel.Application excel = null; 
      try 
      { 
       excel = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Please run Excel"); 
       Console.ReadLine(); 
       Environment.Exit(0); 
      } 

      try 
      { 
       LockUnlock(excel, true); 

       var shapes = excel.ActiveSheet.Shapes; 
       Console.WriteLine(" --- Create chart --- "); 
       Excel.Shape shape = shapes.AddChart2(-1, Excel.XlChartType.xlColumnClustered); 

       Console.WriteLine(" --- 1st chart filling --- "); 
       CreateSeries(shape); 

       Console.WriteLine(" --- 2nde chart filling --- "); 
       CreateSeries(shape); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error : " + ex); 
      } 
      finally 
      { 
       LockUnlock(excel, false); 
       Console.ReadLine(); 
      } 
     } 

     static void CreateSeries(Excel.Shape shape) 
     { 
      var seriesCollection = (Excel.SeriesCollection)shape.Chart.SeriesCollection(); 
      while (0 < seriesCollection.Count) 
       seriesCollection.Item(1).Delete(); 

      var donnee1 = new object[] { 10, 20, 30 }; 
      var series = seriesCollection.NewSeries(); 
      Console.WriteLine("Add values to serie : " + donnee1.Select(v => v.ToString()).Aggregate((a, b) => a + ", " + b)); 
      series.Values = donnee1; 
      Console.WriteLine("Serie data : " + series.Formula); 

      series.ChartType = Excel.XlChartType.xlDoughnut; 

      for (int i = 0; i < donnee1.Length; i++) 
      { 
       Excel.Point pt = series.Points(i + 1); 
       Console.WriteLine("points : " + pt.Name); 
      } 
     } 

     private static void LockUnlock(Excel.Application excel, bool isFiger) 
     { 
      excel.DisplayAlerts = !isFiger; 
      excel.ScreenUpdating = !isFiger; 
      excel.EnableEvents = !isFiger; 
      excel.Interactive = !isFiger; 
     } 
    } 
} 

당신이 나를 도울 수 있습니까?

감사

+0

"두 번째로 오류가 발생했습니다." 어떤 오류입니까? COM 예외? C# 예외? 어떤 코드 줄이 실제로 깨져 있습니까? – Drakestar

답변

0

나는 하나 개의 모양이 개 차트를 만들 수있는 능력을 본 적이 없습니다. 그게 실패한 것 같아. 시도해보십시오 ...

  Excel.Shape shape; 

      shape = shapes.AddChart2(-1, Excel.XlChartType.xlColumnClustered); 
      Console.WriteLine(" --- 1st chart filling --- "); 
      CreateSeries(shape); 

      shape = shapes.AddChart2(-1, Excel.XlChartType.xlColumnClustered); 
      Console.WriteLine(" --- 2nde chart filling --- "); 
      CreateSeries(shape); 
+0

문제를 재현하기 위해 POC에서 그 작업을 수행합니다. 내 소프트웨어의 differents 데이터로 2 개의 다른 업데이트에 해당합니다. – Maverick