簡體   English   中英

如何使用EPPLus修改圖表系列?

[英]How do I modify a chart series using EPPLus?

我想問一下如何使用EPPLUS庫更新excel中現有圖表的系列值。 我還沒找到怎么做。 我已成功創建圖表,但仍無法更新系列值。

有人可以提供一些示例代碼或參考鏈接嗎?

很抱歉這么晚回答(在搜索其他內容時,你的帖子就出現了)。 如果圖表有一系列指向工作表中的單元格,為什么不能直接更新單元格值? 像這樣,首先創建餅圖:

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

}

然后更新單元格:

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

如果您需要更改系列本身的定義 ,請按名稱獲取:

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

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM