2016-11-29 1 views
1

У меня похоже на ссылку ниже проблемы.выбранный EPPlus (пирог, штрих-код) выбран (B2, B36, B38) .. и т. Д. Ячейки excel

EPPlus chart from list of single excel cells. How?

Я попробовал код, но он показывает, что он дважды в графике. Например:

Этот код показывает таблицу Excel -> выберите данные-> вкладку с метками горизонтальной (категории) оси, на которой отображается 100 100 300 600 записей. Что является причиной этого? Диаграмма написана дважды в первых данных, я не нашел решения проблемы.

ответ

0

Я думаю, вы только что обнаружили ошибку с EPPlus. Позор мне не замечая, что с этой записью вы ссылаетесь. Похоже, что при использовании селектора диапазонов Excel (имена ячеек, разделенных запятыми) итератор для класса ExcelRange возвращает двойную ссылку на первую ячейку, в данном случае B2.

Работа должна состоять в том, чтобы использовать другую перегрузку для Series.Add, которая займет два диапазона строк. Вот тестовый модуль, который показывает проблему и обходной путь:

[TestMethod] 
public void Chart_From_Cell_Union_Selector_Bug_Test() 
{ 
    var existingFile = new FileInfo(@"c:\temp\Chart_From_Cell_Union_Selector_Bug_Test.xlsx"); 
    if (existingFile.Exists) 
     existingFile.Delete(); 

    using (var pck = new ExcelPackage(existingFile)) 
    { 
     var myWorkSheet = pck.Workbook.Worksheets.Add("Content"); 
     var ExcelWorksheet = pck.Workbook.Worksheets.Add("Chart"); 

     //Some data 
     myWorkSheet.Cells["A1"].Value = "A"; 
     myWorkSheet.Cells["A2"].Value = 100; myWorkSheet.Cells["A3"].Value = 400; myWorkSheet.Cells["A4"].Value = 200; myWorkSheet.Cells["A5"].Value = 300; myWorkSheet.Cells["A6"].Value = 600; myWorkSheet.Cells["A7"].Value = 500; 
     myWorkSheet.Cells["B1"].Value = "B"; 
     myWorkSheet.Cells["B2"].Value = 300; myWorkSheet.Cells["B3"].Value = 200; myWorkSheet.Cells["B4"].Value = 1000; myWorkSheet.Cells["B5"].Value = 600; myWorkSheet.Cells["B6"].Value = 500; myWorkSheet.Cells["B7"].Value = 200; 

     //Pie chart shows with EXTRA B2 entry due to problem with ExcelRange Enumerator 
     ExcelRange values = myWorkSheet.Cells["B2,B4,B6"]; //when the iterator is evaluated it will return the first cell twice: "B2,B2,B4,B6" 
     ExcelRange xvalues = myWorkSheet.Cells["A2,A4,A6"]; //when the iterator is evaluated it will return the first cell twice: "A2,A2,A4,A6" 
     var chartBug = ExcelWorksheet.Drawings.AddChart("Chart BAD", eChartType.Pie); 
     chartBug.Series.Add(values, xvalues); 
     chartBug.Title.Text = "Using ExcelRange"; 

     //Pie chart shows correctly when using string addresses and avoiding ExcelRange 
     var chartGood = ExcelWorksheet.Drawings.AddChart("Chart GOOD", eChartType.Pie); 
     chartGood.SetPosition(10, 0, 0, 0); 
     chartGood.Series.Add("Content!B2,Content!B4,Content!B6", "Content!A2,Content!A4,Content!A6"); 
     chartGood.Title.Text = "Using String References"; 

     pck.Save(); 
    } 
} 

Здесь выход:

enter image description here

Я отправлю его в качестве вопроса на своей странице CodePlex, чтобы увидеть, если они могут установите его для следующего выпуска.

+0

благодарит за ваш ответ. проблема временно разрешена. – ocean

+0

Я разместил это как проблему для кода plex: http://epplus.codeplex.com/workitem/15561 @ocean: Задайте вопрос как ответ или полезно, если это так. – Ernie

+0

Хорошо. Спасибо Эрни .. – ocean

Смежные вопросы