NPOI Bar/Column 图表?

NPOI Bar/Column Chart?

我需要在 excel 上创建一个简单的条形图并将其导出。 在 NPOI 的 repo 上搜索示例并通过代码,我看到可以创建折线图和散点图。

我正在考虑使用已创建的图表创建一个 excel 模板,因此修改它们的轴。

我需要的只是确认无法使用 NPOI 创建 bar/column 图表。

提前致谢!

好的,在调查 NPOI github 问题后,我发现这是可能的。但它有一些限制。

我无法在图表上设置小数,但在对 Java 线程的数据格式进行了一些调查后,我能够通过更改当前线程文化来解决问题。

下面的代码示例:

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