NPOI 柱形图

问题描述 投票:0回答:1
using NPOI.SS.UserModel;
using NPOI.SS.UserModel.Charts;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

class Program
{
    static void Main(string[] args)
    {
        string filePath = "C:\\Users\\lenovo\\Downloads\\testChart.xlsx";

        // Create a new Excel workbook
        IWorkbook workbook = new XSSFWorkbook();
        ISheet sheet = workbook.CreateSheet("ChartSheet");

        // Create some sample data
        int startDataRow = 1;
        int rowIndex = startDataRow;
        int columnQtt = 2;
        int tipoId = 1;
        string currentTipo = "Sample Tipo";

        for (int i = 0; i < 5; i++)
        {
            IRow row = sheet.CreateRow(rowIndex++);
            row.CreateCell(0).SetCellValue("Category " + i);
            row.CreateCell(1).SetCellValue(new Random().Next(1, 100)); // Sample value
        }

        // Create chart
        CreateChart(columnQtt, rowIndex, tipoId, currentTipo, sheet, startDataRow);

        // Write the workbook content to a file
        using (var fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
        {
            workbook.Write(fileStream);
        }
    }

    private static void CreateChart(int columnQtt, int rowIndex, int tipoId, string currentTipo, ISheet sheet, int startDataRow)
    {
        XSSFDrawing drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch();
        XSSFClientAnchor anchor = (XSSFClientAnchor)drawing.CreateAnchor(0, 0, 0, 0, columnQtt + 1, startDataRow - 2, columnQtt + 10, startDataRow + 12);
        XSSFChart chart = (XSSFChart)drawing.CreateChart(anchor);

        IBarChartData<string, double> barChartData = chart.ChartDataFactory.CreateBarChartData<string, double>();
        IChartLegend legend = chart.GetOrCreateLegend();
        legend.Position = LegendPosition.Bottom;

       
        IChartAxis bottomAxis = chart.ChartAxisFactory.CreateCategoryAxis(AxisPosition.Bottom);
        bottomAxis.MajorTickMark = AxisTickMark.None;
        IValueAxis leftAxis = chart.ChartAxisFactory.CreateValueAxis(AxisPosition.Left);
        leftAxis.Crosses = AxisCrosses.AutoZero;
        leftAxis.SetCrossBetween(AxisCrossBetween.Between);

        int endDataRow = rowIndex - 1;

        
        IChartDataSource<string> categoryAxis = DataSources.FromStringCellRange(sheet, new CellRangeAddress(startDataRow, endDataRow, 0, 0));
        IChartDataSource<double> valueAxis = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(startDataRow, endDataRow, columnQtt - 1, columnQtt - 1));
        var serie = barChartData.AddSeries(categoryAxis,valueAxis); 

        serie.SetTitle(currentTipo);

        chart.Plot(barChartData, bottomAxis, leftAxis);
    }
}

这是NPOI包条形图(水平条形图)编码。我想要柱形图(垂直条形图),但它不可用,所以我尝试反转条形图的参数以将其转换为柱形图。

 var serie = barChartData.AddSeries(valueAxis,categoryAxis); //reversed parameters

它抛出类似的错误

System.ArgumentException: 'Value data source must be numeric.'

我的要求是我想使用 NPOI nuget 包在 excel 中生成柱形图,我尝试的方式可以获得结果或者 NPOI 支持柱形图吗?有新的发布示例链接可供参考吗?

c# charts bar-chart .net-6.0 npoi
1个回答
0
投票

您是否尝试过使用

CreateColumnChartData
代替
CreateBarChartData

仅换线

IBarChartData<string, double> barChartData = chart.ChartDataFactory.CreateBarChartData<string, double>();

IColumnChartData<string, double> columnChartData = chart.ChartDataFactory.CreateColumnChartData<string, double>();

我正在使用 NPOI 2.6.2

© www.soinside.com 2019 - 2024. All rights reserved.