2016-02-10 2 views
0

Я использую библиотеку EPPLUS и пытаюсь рисовать круговую диаграмму. при открытии загруженного excel я не получаю никаких данных или выбора диапазона в области Chart. Диаграмма, показывающая только один текст, который является названием диаграммы. Мой код:Создайте диаграмму в Excel с помощью EPPLUS в C#

public static string RunSample5(DirectoryInfo outputDir) 
    { 
     FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample5.xlsx"); 
     if (newFile.Exists) 
     { 
      newFile.Delete(); // ensures we create a new workbook 
      newFile = new FileInfo(outputDir.FullName + @"\sample5.xlsx"); 
     } 
     using (ExcelPackage package = new ExcelPackage(newFile)) 
     { 
      //Open worksheet 1 
      ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; 
      worksheet.InsertRow(5, 2); 
      //Add the headers 
      worksheet.Cells[1, 1].Value = "ID"; 
      worksheet.Cells[1, 2].Value = "Product"; 
      worksheet.Cells[1, 3].Value = "Quantity"; 
      worksheet.Cells[1, 4].Value = "Price"; 
      worksheet.Cells[1, 5].Value = "Value"; 

      //Add some items... 
      worksheet.Cells["A2"].Value = 12001; 
      worksheet.Cells["B2"].Value = "Nails"; 
      worksheet.Cells["C2"].Value = 37; 
      worksheet.Cells["D2"].Value = 3.99; 

      worksheet.Cells["A3"].Value = 12002; 
      worksheet.Cells["B3"].Value = "Hammer"; 
      worksheet.Cells["C3"].Value = 5; 
      worksheet.Cells["D3"].Value = 12.10; 

      var chart = (worksheet.Drawings.AddChart("PieChart", eChartType.Pie3D) as ExcelPieChart); 

      chart.Title.Text = "Total"; 
      //From row 1 colum 5 with five pixels offset 
      chart.SetPosition(0, 0, 5, 5); 
      chart.SetSize(600, 300); 

      ExcelAddress valueAddress = new ExcelAddress(2, 3, 6, 3); 
      var ser = (chart.Series.Add(valueAddress.Address, "B2:B3") as ExcelPieChartSerie); 
      chart.DataLabel.ShowCategory = true; 
      chart.DataLabel.ShowPercent = true; 

      chart.Legend.Border.LineStyle = eLineStyle.Solid; 
      chart.Legend.Border.Fill.Style = eFillStyle.SolidFill; 
      chart.Legend.Border.Fill.Color = Color.DarkBlue; 
      worksheet.View.PageLayoutView = false; 
      package.Save(); 
     } 

     return newFile.FullName; 
    } 
+1

Ссылка на эту ссылку. Надеюсь, что это поможет вам. http://stackoverflow.com/questions/29976752/create-excel-graph-with-epplus – coder

+0

Выглядит нормально. Может быть, опубликовать снимок экрана? – Ernie

ответ

0

Ваш призыв к chart.Series.Add() необходимо принимать два значения ExcelRange, первый для значений, второе для ключей категории.

Вот фрагмент кода, который работает для меня:

chart.Series.Add(ExcelRange.GetAddress(dataRowStart, dataValueColumn, dataRowEnd, dataValueColumn), ExcelRange.GetAddress(dataRowStart, dataCategoryColumn, dataRowEnd, dataCategoryColumn)); 

Где dataRowStart, dataValueColumn, dataRowEnd, dataCategoryColumn все местные целочисленные переменные, которые зависят от источника данных.

Кроме того, ExcelRanges не должны включать строки заголовка.

Вот ссылка на пример файла C# EPPlus в github, который включает в себя карты, поддерживаемые в настоящее время. https://github.com/pruiz/EPPlus/blob/master/SampleApp/Sample6.cs

+0

Как определить серию только для столбца Y (хочу X как 0,1, ..., N)? – constructor