I want to ask about how to update series value of existing chart in excel using EPPLUS library.
I can't find yet how to do it.
I have created chart successfully, but still can't to update the series value.
Anyone can provide me some sample code or reference link?
Sorry to answer so late (came accross your post while searching for something else). If the chart has a series which are pointed at cells in a worksheet, why cant you just update the cell values directly? Like this, first create the pie chart:
public void PieChartCreate()
{
var file = new FileInfo(@"c:\temp\temp.xlsx");
if (file.Exists)
file.Delete();
var pck = new ExcelPackage(file);
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("newsheet");
var data = new List<KeyValuePair<string, int>>
{
new KeyValuePair<string, int>("Group A", 44613),
new KeyValuePair<string, int>("Group B", 36432),
new KeyValuePair<string, int>("Group C", 6324),
new KeyValuePair<string, int>("Group A", 6745),
new KeyValuePair<string, int>("Group B", 23434),
new KeyValuePair<string, int>("Group C", 5123),
new KeyValuePair<string, int>("Group A", 34545),
new KeyValuePair<string, int>("Group B", 5472),
new KeyValuePair<string, int>("Group C", 45637),
new KeyValuePair<string, int>("Group A", 37840),
new KeyValuePair<string, int>("Group B", 20827),
new KeyValuePair<string, int>("Group C", 4548),
};
//Fill the table
var startCell = worksheet.Cells[1,1];
startCell.Offset(0, 0).Value = "Group Name";
startCell.Offset(0, 1).Value = "Value";
for (var i = 0; i < data.Count(); i++)
{
startCell.Offset(i + 1, 0).Value = data[i].Key;
startCell.Offset(i + 1, 1).Value = data[i].Value;
}
//Add the chart to the sheet
var pieChart = worksheet.Drawings.AddChart("Chart1", eChartType.Pie);
pieChart.SetPosition(data.Count + 1, 0, 0, 0);
pieChart.Title.Text = "Test Chart";
pieChart.Title.Font.Bold = true;
pieChart.Title.Font.Size = 12;
//Set the data range
var series = pieChart.Series.Add(worksheet.Cells[2, 2, data.Count, 2], worksheet.Cells[2, 1, data.Count, 1]);
var pieSeries = (ExcelPieChartSerie)series;
pieSeries.Explosion = 5;
//Format the labels
pieSeries.DataLabel.Font.Bold = true;
pieSeries.DataLabel.ShowValue = true;
pieSeries.DataLabel.ShowPercent = true;
pieSeries.DataLabel.ShowLeaderLines = true;
pieSeries.DataLabel.Separator = ";";
pieSeries.DataLabel.Position = eLabelPosition.BestFit;
//Format the legend
pieChart.Legend.Add();
pieChart.Legend.Border.Width = 0;
pieChart.Legend.Font.Size = 12;
pieChart.Legend.Font.Bold = true;
pieChart.Legend.Position = eLegendPosition.Right;
pck.Save();
}
Then update the cells:
public void PieChartUpdate()
{
var file = new FileInfo(@"c:\temp\temp.xlsx");
if (!file.Exists)
return;
var pck = new ExcelPackage(file);
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets["newsheet"];
var startCell = worksheet.Cells[2, 2];
for (var i = 0; i < 12; i++)
{
startCell.Offset(i, 0).Value = ((double)startCell.Offset(i, 0).Value) * 100;
}
file.Delete();
pck.Save();
}
If you need to change the definition of the series itself, then get it by name:
public void PieChartUpdateSeries()
{
var file = new FileInfo(@"c:\temp\temp.xlsx");
if (!file.Exists)
return;
var pck = new ExcelPackage(file);
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets["newsheet"];
var piechart = worksheet.Drawings["Chart1"] as ExcelPieChart;
var series = piechart.Series[0];
series.XSeries = worksheet.Cells[2, 1, 7, 1].FullAddress;
series.Series = worksheet.Cells[2, 2, 7, 2].FullAddress;
file.Delete();
pck.Save();
}
Hope that helps.