2016-11-29 1 views
1

J'ai similaire au lien ci-dessous le problème.graphique EPPlus (tarte, graphique à barres) sélectionné (B2, B36, B38) .. etc cellules excel

EPPlus chart from list of single excel cells. How?

J'ai essayé le code mais il montre deux fois dans le tableau. Par exemple:

Ce tableau affiche Excel -> sélectionnez données-> étiquette d'axe horizontale (catégorie) vous affichez 100 100 300 600 écriture. Quelle est la raison pour ça? Le tableau est écrit deux fois les premières données, je n'ai pas trouvé de solution au problème.

Répondre

0

Je pense que vous venez de découvrir un bug avec EPPlus. Honte à moi de ne pas remarquer que ce poste vous référence. Il semble que lorsque vous utilisez le sélecteur de plage d'union Excel (les noms de cellules sont séparés par des virgules), l'itérateur de la classe ExcelRange renvoie une double référence à la première cellule, dans ce cas B2.

Une solution consiste à utiliser l'autre surcharge pour Series.Add qui prendra deux plages de chaînes. Voici un test unitaire qui montrent le problème et la solution de contournement:

[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(); 
    } 
} 

Voici la sortie:

enter image description here

Je vais le poster comme une question sur leur page CodePlex pour voir si elles peuvent faites-le réparer pour la prochaine version.

+0

merci pour votre réponse à moi. problème résolu temporairement. – ocean

+0

Je l'ai signalé comme un problème sur le code plex: http://epplus.codeplex.com/workitem/15561 @ocean: Rendre la question comme réponse ou utile si tel est le cas. – Ernie

+0

Ok. Merci Ernie .. – ocean