.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();
创建结果

该方法只用于个人使用, 或可使用
EPPlus 创建,但是后续版本需要许可证

浙公网安备 33010602011771号