Skip to content

Integrate XDDFChart into XSSFDrawing#1733

Merged
tonyqus merged 9 commits intonissl-lab:masterfrom
tonyqus:xddf
Mar 14, 2026
Merged

Integrate XDDFChart into XSSFDrawing#1733
tonyqus merged 9 commits intonissl-lab:masterfrom
tonyqus:xddf

Conversation

@tonyqus
Copy link
Member

@tonyqus tonyqus commented Mar 13, 2026

  • Remove old XSSFChart interface and classes
  • Remove CreateChart method from IDrawing interface
  • XSSFDrawing.CreateChart and SXSSFDrawing.CreateChart returns XDDFChart instead
  • Update XDDF Unit Tests
  • Chart Type supported: Pie, Bar, Scatter, Radar, Line

This PR is a breaking changes for Chart interface

@tonyqus tonyqus added this to the NPOI 2.8.0 milestone Mar 13, 2026
@tonyqus tonyqus changed the title Integrate XDDFChart into XSSDDrawing Integrate XDDFChart into XSSFDrawing Mar 13, 2026
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates XSSF chart creation and related APIs from the legacy NPOI.SS.UserModel.Charts/IChart surface to the newer XDDF chart model, making XSSFDrawing/SXSSFDrawing create charts as XDDFChart (with XSSFChart now implemented as an XDDFChart).

Changes:

  • Remove the legacy SS chart interfaces/types (IChart, IChartAxis, DataSources, etc.) and XSSF chart implementations based on them.
  • Update XSSF drawing/chart APIs so chart creation returns XDDFChart and tests use XDDF axes/data sources.
  • Harden several generated OOXML chart classes against null internal lists; adjust XDDF axis APIs toward property-based accessors.

Reviewed changes

Copilot reviewed 88 out of 88 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
testcases/ooxml/XSSF/UserModel/TestXSSFChart.cs Update chart legend API usage and axis list typing.
testcases/ooxml/XSSF/UserModel/TestXDDFDateAxis.cs Migrate date axis test to XDDF axis creation.
testcases/ooxml/XSSF/UserModel/Extensions/TestBarGroupingMapper.cs Remove legacy bar grouping mapper test.
testcases/ooxml/XSSF/UserModel/Charts/TestXSSFColumnChartData.cs Remove legacy column chart data test.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFValueAxis.cs Migrate value axis test to XDDF APIs.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFScatterChartData.cs Migrate scatter chart test to XDDF APIs/data sources.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFManualLayout.cs Migrate manual layout test to XDDF legend/layout APIs.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFLineChartData.cs Migrate line chart test to XDDF APIs/data sources.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFChartTitle.cs Migrate chart title test to XDDF APIs/data sources.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFChartLegend.cs Migrate legend tests to XDDF legend APIs.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFChartAxis.cs Migrate axis tests to XDDF axis APIs.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFCategoryAxis.cs Migrate category axis test to XDDF axis creation.
testcases/ooxml/XSSF/UserModel/Charts/TestXDDFBarChartData.cs Migrate bar chart data tests to XDDF APIs/data sources.
testcases/ooxml/NPOI.OOXML.TestCases.Core.csproj Exclude removed legacy chart tests from compilation.
testcases/main/SS/UserModel/Charts/TestDataSources.cs Remove legacy DataSources tests.
ooxml/XSSF/UserModel/XSSFSheet.cs Update sheet chart-copy logic to call XSSFDrawing.CreateChart directly.
ooxml/XSSF/UserModel/XSSFDrawing.cs Change CreateChart return type to XDDFChart.
ooxml/XSSF/UserModel/XSSFChart.cs Rebase XSSFChart onto XDDFChart and remove legacy chart interfaces.
ooxml/XSSF/UserModel/Extensions/BarGroupingMapper.cs Remove legacy bar grouping mapping extension.
ooxml/XSSF/UserModel/Charts/XSSFValueAxis.cs Remove legacy XSSF axis implementation.
ooxml/XSSF/UserModel/Charts/XSSFScatterChartData.cs Remove legacy XSSF scatter chart data implementation.
ooxml/XSSF/UserModel/Charts/XSSFPieChartData.cs Remove legacy XSSF pie chart data implementation.
ooxml/XSSF/UserModel/Charts/XSSFManualLayout.cs Remove legacy XSSF manual layout implementation.
ooxml/XSSF/UserModel/Charts/XSSFLineChartData.cs Remove legacy XSSF line chart data implementation.
ooxml/XSSF/UserModel/Charts/XSSFDateAxis.cs Remove legacy XSSF date axis implementation.
ooxml/XSSF/UserModel/Charts/XSSFColumnChartData.cs Remove legacy XSSF column chart data implementation.
ooxml/XSSF/UserModel/Charts/XSSFChartUtil.cs Remove legacy XSSF chart utility builder.
ooxml/XSSF/UserModel/Charts/XSSFChartLegend.cs Remove legacy XSSF chart legend implementation.
ooxml/XSSF/UserModel/Charts/XSSFChartDataFactory.cs Remove legacy XSSF chart data factory.
ooxml/XSSF/UserModel/Charts/XSSFChartAxis.cs Remove legacy XSSF chart axis base.
ooxml/XSSF/UserModel/Charts/XSSFCategoryAxis.cs Remove legacy XSSF category axis implementation.
ooxml/XSSF/UserModel/Charts/XSSFBarChartData.cs Remove legacy XSSF bar chart data implementation.
ooxml/XSSF/UserModel/Charts/XSSFAreaChartData.cs Remove legacy XSSF area chart data implementation.
ooxml/XSSF/UserModel/Charts/AbstractXSSFChartSeries.cs Remove legacy XSSF chart series base.
ooxml/XSSF/Streaming/SXSSFDrawing.cs Change streaming CreateChart return type to XDDFChart.
ooxml/XDDF/UserModel/Chart/XDDFValueAxis.cs Rename cross-axis method and introduce CrossBetween property usage.
ooxml/XDDF/UserModel/Chart/XDDFSeriesAxis.cs Rename cross-axis method and update initialization to properties.
ooxml/XDDF/UserModel/Chart/XDDFScatterChartData.cs Null-guard series list and align axis-definition helper naming.
ooxml/XDDF/UserModel/Chart/XDDFRadarChartData.cs Align axis-definition helper naming.
ooxml/XDDF/UserModel/Chart/XDDFPieChartData.cs Null-guard series list.
ooxml/XDDF/UserModel/Chart/XDDFLineChartData.cs Null-guard series list and align axis-definition helper naming.
ooxml/XDDF/UserModel/Chart/XDDFDateAxis.cs Rename cross-axis method and update initialization to properties.
ooxml/XDDF/UserModel/Chart/XDDFDataSourcesFactory.cs Broaden cell-range data source signatures to ISheet.
ooxml/XDDF/UserModel/Chart/XDDFChartData.cs Rename axis-definition helper and add Series.SetTitle(string) overload.
ooxml/XDDF/UserModel/Chart/XDDFChartAxis.cs Convert many axis methods to properties and rename cross-axis method.
ooxml/XDDF/UserModel/Chart/XDDFChart.cs Update cross-axis calls, tweak axis parsing API names, and adjust Commit visibility.
ooxml/XDDF/UserModel/Chart/XDDFCategoryAxis.cs Rename cross-axis method and update initialization to properties.
ooxml/XDDF/UserModel/Chart/XDDFBarChartData.cs Null-guard series list and align axis-definition helper naming.
ooxml/NPOI.OOXML.Core.csproj Exclude removed legacy XSSF chart implementation files from build.
main/SS/UserModel/Drawing.cs Remove CreateChart from the generic IDrawing interface.
main/HSSF/UserModel/HSSFPatriarch.cs Remove unimplemented CreateChart from HSSF patriarch.
OpenXmlFormats/Drawing/Chart/ScatterChart.cs Null-guard SizeOfAxIdArray() when backing list is null.
OpenXmlFormats/Drawing/Chart/LineChart.cs Null-guard SizeOfAxIdArray() when backing list is null.
OpenXmlFormats/Drawing/Chart/Chart.cs Add CT_ChartSpace.Save(Stream) and null-guard several collections.
OpenXmlFormats/Drawing/Chart/BarChart.cs Initialize default grouping and null-guard SizeOfAxIdArray().
main/SS/UserModel/Chart.cs Remove legacy IChart interface.
main/SS/UserModel/Charts/ValueAxis.cs Remove legacy IValueAxis interface.
main/SS/UserModel/Charts/ScatterChartSeries.cs Remove legacy scatter series interface.
main/SS/UserModel/Charts/ScatterChartData.cs Remove legacy scatter chart data interface.
main/SS/UserModel/Charts/PieChartSeries.cs Remove legacy pie series interface.
main/SS/UserModel/Charts/PieChartData.cs Remove legacy pie chart data interface.
main/SS/UserModel/Charts/ManuallyPositionable.cs Remove legacy manual positioning interface.
main/SS/UserModel/Charts/ManualLayout.cs Remove legacy manual layout interface.
main/SS/UserModel/Charts/LineChartSeries.cs Remove legacy line series interface.
main/SS/UserModel/Charts/LineChartData.cs Remove legacy line chart data interface.
main/SS/UserModel/Charts/LegendPosition.cs Remove legacy legend position enum.
main/SS/UserModel/Charts/LayoutTarget.cs Remove legacy layout target enum.
main/SS/UserModel/Charts/LayoutMode.cs Remove legacy layout mode enum.
main/SS/UserModel/Charts/DataSources.cs Remove legacy DataSources helper.
main/SS/UserModel/Charts/ColumnChartSeries.cs Remove legacy column series interface.
main/SS/UserModel/Charts/ColumnChartData.cs Remove legacy column chart data interface.
main/SS/UserModel/Charts/ChartSeries.cs Remove legacy chart series interfaces/enums.
main/SS/UserModel/Charts/ChartLegend.cs Remove legacy chart legend interface.
main/SS/UserModel/Charts/ChartDataSource.cs Remove legacy chart data source interface.
main/SS/UserModel/Charts/ChartDataFactory.cs Remove legacy chart data factory interface.
main/SS/UserModel/Charts/ChartData.cs Remove legacy chart data interface.
main/SS/UserModel/Charts/ChartAxisFactory.cs Remove legacy chart axis factory interface.
main/SS/UserModel/Charts/ChartAxis.cs Remove legacy chart axis interface.
main/SS/UserModel/Charts/BarGrouping.cs Remove legacy bar grouping enum.
main/SS/UserModel/Charts/BarChartSeries.cs Remove legacy bar series interface.
main/SS/UserModel/Charts/BarChartData.cs Remove legacy bar chart data interface.
main/SS/UserModel/Charts/AxisTickMark.cs Remove legacy axis tick mark enum.
main/SS/UserModel/Charts/AxisPosition.cs Remove legacy axis position enum.
main/SS/UserModel/Charts/AxisOrientation.cs Remove legacy axis orientation enum.
main/SS/UserModel/Charts/AxisCrosses.cs Remove legacy axis crosses enum.
main/SS/UserModel/Charts/AxisCrossBetween.cs Remove legacy axis cross-between enum.
main/SS/UserModel/Charts/AreaChartSeries.cs Remove legacy area series interface.
main/SS/UserModel/Charts/AreaChartData.cs Remove legacy area chart data interface.
Comments suppressed due to low confidence (1)

ooxml/XDDF/UserModel/Chart/XDDFChartData.cs:56

  • In DefineAxis, values[axisId] can throw KeyNotFoundException when the axis id isn't present in the values map. Use values.TryGetValue(axisId, out var axis) (and also guard when values is null) before adding to list to make axis parsing robust for partially-defined charts.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tonyqus tonyqus merged commit 73f5243 into nissl-lab:master Mar 14, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants