.NET 通过Open XML 在创建的Excel文件中给表格数据添加数据条

通过NuGet包添加引用

DocumentFormat.OpenXml

ClosedXML

 

创建文件类

public class DataBarSimulation
{
    public void CreateExcelWithDataBars()
    {
        using (var workbook = new XLWorkbook())
        {
            var worksheet = workbook.Worksheets.Add("销售数据可视化");

            // 添加数据
            AddSampleData(worksheet);

            // 添加数据条(模拟图表)
            AddDataBars(worksheet);

            // 添加迷你图效果
            AddSparklines(worksheet);

            workbook.SaveAs("SalesReport_DataBars.xlsx");
            Console.WriteLine("Excel文件已创建: SalesReport_DataBars.xlsx");
            Console.WriteLine("使用数据条和条件格式模拟图表效果");
        }
    }

    private void AddSampleData(IXLWorksheet worksheet)
    {
        // 标题行
        worksheet.Cell("A1").Value = "月份";
        worksheet.Cell("B1").Value = "销售额";
        worksheet.Cell("C1").Value = "利润";
        worksheet.Cell("D1").Value = "销售趋势";
        worksheet.Cell("E1").Value = "利润趋势";

        var data = new[]
        {
            new { Month = "一月", Sales = 120000, Profit = 30000 },
            new { Month = "二月", Sales = 150000, Profit = 40000 },
            new { Month = "三月", Sales = 180000, Profit = 50000 },
            new { Month = "四月", Sales = 160000, Profit = 45000 },
            new { Month = "五月", Sales = 200000, Profit = 55000 },
            new { Month = "六月", Sales = 220000, Profit = 60000 }
        };

        for (int i = 0; i < data.Length; i++)
        {
            worksheet.Cell(i + 2, 1).Value = data[i].Month;
            worksheet.Cell(i + 2, 2).Value = data[i].Sales;
            worksheet.Cell(i + 2, 3).Value = data[i].Profit;
        }

        // 设置样式
        var headerRange = worksheet.Range("A1:E1");
        headerRange.Style.Font.Bold = true;
        headerRange.Style.Fill.BackgroundColor = XLColor.LightGray;

        worksheet.Columns().AdjustToContents();
    }

    private void AddDataBars(IXLWorksheet worksheet)
    {
        // 为销售额添加数据条
        var salesRange = worksheet.Range("B2:B7");
        salesRange.AddConditionalFormat().DataBar(XLColor.Blue, XLColor.LightBlue);

        // 为利润添加数据条
        var profitRange = worksheet.Range("C2:C7");
        profitRange.AddConditionalFormat().DataBar(XLColor.Green, XLColor.LightGreen);

        // 添加百分比显示
        for (int i = 2; i <= 7; i++)
        {
            worksheet.Cell(i, 4).Value = GetTrendSymbol(worksheet.Cell(i, 2).GetValue<int>(), 150000);
            worksheet.Cell(i, 5).Value = GetTrendSymbol(worksheet.Cell(i, 3).GetValue<int>(), 45000);
        }
    }

    private string GetTrendSymbol(int value, int average)
    {
        if (value > average * 1.2) return "↑↑"; // 显著高于平均
        if (value > average) return "↑";        // 高于平均
        if (value < average * 0.8) return "↓↓"; // 显著低于平均
        if (value < average) return "↓";        // 低于平均
        return "→";                             // 持平
    }

    private void AddSparklines(IXLWorksheet worksheet)
    {
        // 在备注列添加文本趋势
        worksheet.Cell("F1").Value = "业绩评价";

        var evaluations = new[] { "良好", "优秀", "杰出", "良好", "优秀", "杰出" };
        for (int i = 0; i < evaluations.Length; i++)
        {
            worksheet.Cell(i + 2, 6).Value = evaluations[i];
        }
    }
}

  方法调用

DataBarSimulation excelChart = new DataBarSimulation();
excelChart.CreateExcelWithDataBars();

  创建结果

111

 

该方法只用于个人使用, 或可使用

EPPlus 创建,但是后续版本需要许可证

 

posted @ 2025-10-15 17:11  黑夜的ghost  阅读(3)  评论(0)    收藏  举报