From c15bdcbef7db5553ec06337274a2ee49e0fd7932 Mon Sep 17 00:00:00 2001 From: KB Bot Date: Mon, 11 Aug 2025 08:23:11 +0000 Subject: [PATCH 1/4] Added new kb article generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape --- ...nfiguring-axes-excel-floatingchartshape.md | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md diff --git a/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md b/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md new file mode 100644 index 00000000..344cd1de --- /dev/null +++ b/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md @@ -0,0 +1,107 @@ +--- +title: Generating Stacked Line Graphs and Configuring Axes in Excel Using FloatingChartShape +description: Learn how to generate stacked line graphs and configure axes in Excel spreadsheets using Telerik Document Processing's SpreadProcessing library. +type: how-to +page_title: Creating Stacked Line Graphs and Setting Axes in Excel with FloatingChartShape +meta_title: Creating Stacked Line Graphs and Setting Axes in Excel with FloatingChartShape +slug: generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape +tags: spreadprocessing,telerik document processing,floatingchartshape,line graph,stacked line chart,x-axis,y-axis +res_type: kb +ticketid: 1695510 +--- + +## Environment + + + + + + + + + + + + +
Product SpreadProcessing for Telerik Document Processing
Version 2025.2.701
+ +## Description + +I want to generate stacked line graphs in Excel using the `FloatingChartShape` feature in Telerik Document Processing's SpreadProcessing library. However, the chart defaults to a stacked line graph with markers instead of a plain stacked line graph. Additionally, I want to configure the X-axis to display dates while the Y-axis displays numerical values when plotting multiple columns of data. + +This knowledge base article also answers the following questions: +- How do I create a stacked line chart in Excel using Telerik Document Processing? +- How can I plot specific data on the X-axis and Y-axis in an Excel chart? +- How do I remove markers from a stacked line graph using FloatingChartShape? + +## Solution + +To create a stacked line graph and configure the axes as desired, follow these steps: + +1. Define the `LineSeriesGroup` and set its grouping to `Stacked`. This ensures the graph is created as a stacked line chart. + +```csharp +LineSeriesGroup seriesGroup = new LineSeriesGroup(); +seriesGroup.Grouping = SeriesGrouping.Stacked; +``` + +2. Create individual `LineSeries` for each data column. Set the `Values` to represent numerical data and `Categories` to represent dates. + +```csharp +LineSeries lineSeries1 = new LineSeries(); +lineSeries1.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 1, 10, 1)); +lineSeries1.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); +lineSeries1.Marker = new Marker(); +lineSeries1.Marker.Symbol = MarkerStyle.None; // Removes markers +seriesGroup.Series.Add(lineSeries1); + +LineSeries lineSeries2 = new LineSeries(); +lineSeries2.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 2, 10, 2)); +lineSeries2.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); +lineSeries2.Marker = new Marker(); +lineSeries2.Marker.Symbol = MarkerStyle.None; // Removes markers +seriesGroup.Series.Add(lineSeries2); +``` + +3. Define the axes for the chart. Set the `CategoryAxis` to plot dates and the `ValueAxis` for numerical values. + +```csharp +AxisGroup axisGroup = new AxisGroup(); +CategoryAxis categoryAxis = new CategoryAxis(); +SolidFill lineColor = new SolidFill(new ThemableColor(ThemeColorType.Background2)); +categoryAxis.Outline.Fill = lineColor; +categoryAxis.MajorGridlines.Outline.Fill = lineColor; +axisGroup.CategoryAxis = categoryAxis; + +ValueAxis valueAxis = new ValueAxis(); +valueAxis.Outline.Fill = lineColor; +valueAxis.MajorGridlines.Outline.Fill = lineColor; +axisGroup.ValueAxis = valueAxis; +``` + +4. Create the chart and associate the `LineSeriesGroup` and axes with it. + +```csharp +DocumentChart documentChart = new DocumentChart(); +documentChart.SeriesGroups.Add(seriesGroup); +documentChart.PrimaryAxes = axisGroup; +``` + +5. Replace the default chart in the `FloatingChartShape` with the configured `DocumentChart`. Set the dimensions and add it to the worksheet. + +```csharp +FloatingChartShape floatingChartShape = new FloatingChartShape(worksheet, new CellIndex(0, 5), new CellRange(0, 0, 4, 3), ChartType.Line); +floatingChartShape.Chart = documentChart; +floatingChartShape.Width = 400; // Set desired width +floatingChartShape.Height = 250; // Set desired height + +worksheet.Charts.Add(floatingChartShape); +``` + +By following these steps, you can generate a stacked line graph without markers and configure the axes to display the required data. + +## See Also + +- [SpreadProcessing Documentation](https://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/overview) +- [FloatingChartShape API Reference](https://docs.telerik.com/devtools/document-processing/api/Telerik.Documents.Spreadsheet.Model.Shapes.FloatingChartShape) +- [LineSeriesGroup API Reference](https://docs.telerik.com/devtools/document-processing/api/Telerik.Documents.Spreadsheet.Model.Charts.LineSeriesGroup) From 98448e1f40258e5cfbda7879a3b87d383c08fdf2 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Tue, 16 Sep 2025 15:33:28 +0300 Subject: [PATCH 2/4] Polishing KB. --- ...nfiguring-axes-excel-floatingchartshape.md | 98 +++++++++--------- knowledge-base/images/stacked-line-chart.png | Bin 0 -> 52872 bytes .../features/charts/overview.md | 5 + 3 files changed, 52 insertions(+), 51 deletions(-) create mode 100644 knowledge-base/images/stacked-line-chart.png diff --git a/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md b/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md index 344cd1de..7f7777bf 100644 --- a/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md +++ b/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md @@ -1,74 +1,72 @@ ---- -title: Generating Stacked Line Graphs and Configuring Axes in Excel Using FloatingChartShape -description: Learn how to generate stacked line graphs and configure axes in Excel spreadsheets using Telerik Document Processing's SpreadProcessing library. -type: how-to -page_title: Creating Stacked Line Graphs and Setting Axes in Excel with FloatingChartShape -meta_title: Creating Stacked Line Graphs and Setting Axes in Excel with FloatingChartShape -slug: generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape -tags: spreadprocessing,telerik document processing,floatingchartshape,line graph,stacked line chart,x-axis,y-axis -res_type: kb -ticketid: 1695510 +--- +title: Generating Stacked Line Graphs and Configuring Axes in Excel Using FloatingChartShape +description: Learn how to generate stacked line graphs and configure axes in Excel spreadsheets using Telerik Document Processing's SpreadProcessing library. +type: how-to +page_title: Creating Stacked Line Graphs and Setting Axes in Excel with the SpreadProcessing library +meta_title: Creating Stacked Line Graphs and Setting Axes in Excel with the SpreadProcessing library +slug: generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape +tags: spreadprocessing,telerik, document, processing, floatingchartshape, line, graph, stacked, line, chart, x, axis, y +res_type: kb +ticketid: 1695510 --- ## Environment - - - - - - - - - - - -
Product SpreadProcessing for Telerik Document Processing
Version 2025.2.701
+| Version | Product | Author | +| --- | --- | ---- | +| 2025.3.806 | SpreadProcessing |[Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov)| ## Description -I want to generate stacked line graphs in Excel using the `FloatingChartShape` feature in Telerik Document Processing's SpreadProcessing library. However, the chart defaults to a stacked line graph with markers instead of a plain stacked line graph. Additionally, I want to configure the X-axis to display dates while the Y-axis displays numerical values when plotting multiple columns of data. +This article demonstrates how to generate stacked ine graphs in Excel using the SpreadProcessing library. It also covers how to specify the data sources for the X-axis (dates) and Y-axis (numerical values). Additionally, it explains how to configure chart properties such as marker types, line styles, and visibility to customize the chart's appearance. + +Key topics addressed in this guide include: +- Creating line and stacked line charts in Excel using Telerik Document Processing. +- Assigning specific data ranges to the X-axis (e.g., dates) and Y-axis (numerical values). +- Customizing chart properties, including marker types for each series, line styles, and removing markers when needed. +- Plotting multiple columns of data while ensuring correct alignment between axes. -This knowledge base article also answers the following questions: -- How do I create a stacked line chart in Excel using Telerik Document Processing? -- How can I plot specific data on the X-axis and Y-axis in an Excel chart? -- How do I remove markers from a stacked line graph using FloatingChartShape? +![Stacked Line Chart](images/stacked-line-chart.png) ## Solution To create a stacked line graph and configure the axes as desired, follow these steps: 1. Define the `LineSeriesGroup` and set its grouping to `Stacked`. This ensures the graph is created as a stacked line chart. +2. Create individual `LineSeries` for each data column. Set the `Values` to represent numerical data and `Categories` to represent dates. +3. Define the axes for the chart. Set the `CategoryAxis` to plot dates and the `ValueAxis` for numerical values. +4. Create the chart and associate the `LineSeriesGroup` and axes with it. +5. Replace the default chart in the `FloatingChartShape` with the configured `DocumentChart`. Set the dimensions and add it to the worksheet. ```csharp +var fileBytes = File.ReadAllBytes("fileWithChartData.xlsx"); + +Workbook workbook = xlsxFormatProvider.Import(fileBytes, null); +Worksheet worksheet = workbook.ActiveWorksheet; + LineSeriesGroup seriesGroup = new LineSeriesGroup(); seriesGroup.Grouping = SeriesGrouping.Stacked; -``` - -2. Create individual `LineSeries` for each data column. Set the `Values` to represent numerical data and `Categories` to represent dates. -```csharp +// Make the series one by one LineSeries lineSeries1 = new LineSeries(); lineSeries1.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 1, 10, 1)); lineSeries1.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); lineSeries1.Marker = new Marker(); -lineSeries1.Marker.Symbol = MarkerStyle.None; // Removes markers +lineSeries1.Marker.Symbol = MarkerStyle.Circle; seriesGroup.Series.Add(lineSeries1); LineSeries lineSeries2 = new LineSeries(); lineSeries2.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 2, 10, 2)); lineSeries2.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); lineSeries2.Marker = new Marker(); -lineSeries2.Marker.Symbol = MarkerStyle.None; // Removes markers +lineSeries2.Marker.Symbol = MarkerStyle.Plus; seriesGroup.Series.Add(lineSeries2); -``` -3. Define the axes for the chart. Set the `CategoryAxis` to plot dates and the `ValueAxis` for numerical values. +// Some axes +SolidFill lineColor = new SolidFill(new ThemableColor(ThemeColorType.Background2)); -```csharp AxisGroup axisGroup = new AxisGroup(); CategoryAxis categoryAxis = new CategoryAxis(); -SolidFill lineColor = new SolidFill(new ThemableColor(ThemeColorType.Background2)); categoryAxis.Outline.Fill = lineColor; categoryAxis.MajorGridlines.Outline.Fill = lineColor; axisGroup.CategoryAxis = categoryAxis; @@ -77,31 +75,29 @@ ValueAxis valueAxis = new ValueAxis(); valueAxis.Outline.Fill = lineColor; valueAxis.MajorGridlines.Outline.Fill = lineColor; axisGroup.ValueAxis = valueAxis; -``` -4. Create the chart and associate the `LineSeriesGroup` and axes with it. - -```csharp +// Here is the chart itself DocumentChart documentChart = new DocumentChart(); documentChart.SeriesGroups.Add(seriesGroup); documentChart.PrimaryAxes = axisGroup; -``` - -5. Replace the default chart in the `FloatingChartShape` with the configured `DocumentChart`. Set the dimensions and add it to the worksheet. -```csharp +// We'll make a dummy FloatingChartShape and we'll replace the inner chart. FloatingChartShape floatingChartShape = new FloatingChartShape(worksheet, new CellIndex(0, 5), new CellRange(0, 0, 4, 3), ChartType.Line); floatingChartShape.Chart = documentChart; -floatingChartShape.Width = 400; // Set desired width -floatingChartShape.Height = 250; // Set desired height +floatingChartShape.Width = 400; +floatingChartShape.Height = 250; worksheet.Charts.Add(floatingChartShape); -``` +string exportFileName = "fileWithChart.xlsx"; +using (Stream str = File.OpenWrite(exportFileName)) +{ + xlsxFormatProvider.Export(workbook, str, null); +} +``` By following these steps, you can generate a stacked line graph without markers and configure the axes to display the required data. ## See Also -- [SpreadProcessing Documentation](https://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/overview) -- [FloatingChartShape API Reference](https://docs.telerik.com/devtools/document-processing/api/Telerik.Documents.Spreadsheet.Model.Shapes.FloatingChartShape) -- [LineSeriesGroup API Reference](https://docs.telerik.com/devtools/document-processing/api/Telerik.Documents.Spreadsheet.Model.Charts.LineSeriesGroup) +* [SpreadProcessing Overview]({%slug radspreadprocessing-overview%}) +* [Charts Overview]({%slug radspreadprocessing-features-charts%}) \ No newline at end of file diff --git a/knowledge-base/images/stacked-line-chart.png b/knowledge-base/images/stacked-line-chart.png new file mode 100644 index 0000000000000000000000000000000000000000..2441a825cb158bb4712baf9f83a295486d10eca1 GIT binary patch literal 52872 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 V8&zERox%qHEX;P8=4~T}{ts0ioWuYC literal 0 HcmV?d00001 diff --git a/libraries/radspreadprocessing/features/charts/overview.md b/libraries/radspreadprocessing/features/charts/overview.md index a1c1ae37..73acf7aa 100644 --- a/libraries/radspreadprocessing/features/charts/overview.md +++ b/libraries/radspreadprocessing/features/charts/overview.md @@ -84,3 +84,8 @@ Combo charts combine two or more chart types to make the data easy to understand | ![](images/SpreadProcessing-Features-Charts_15.png) | ![](images/SpreadProcessing-Features-Charts_16.png) | ![](images/SpreadProcessing-Features-Charts_17.png)| >note For more details on the implementation of the charts and the properties you can use with them, check the [Using Charts]({%slug radspreadprocessing-features-charts-using-charts%}) topic. + +## See Also + +* [Generating Stacked Line Graphs and Configuring Axes in Excel Using FloatingChartShape]({%slug generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape%}) + From 6c5396fe1469c7bf4b0700dacbbfcf53ac09cffd Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Wed, 17 Sep 2025 15:06:40 +0300 Subject: [PATCH 3/4] Resloved comments. --- ...figuring-axes-excel-floatingchartshape.md} | 204 +++++++++--------- .../features/charts/overview.md | 2 +- 2 files changed, 103 insertions(+), 103 deletions(-) rename knowledge-base/{generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md => generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md} (71%) diff --git a/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md b/knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md similarity index 71% rename from knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md rename to knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md index 7f7777bf..66f7aa60 100644 --- a/knowledge-base/generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape.md +++ b/knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md @@ -1,103 +1,103 @@ ---- -title: Generating Stacked Line Graphs and Configuring Axes in Excel Using FloatingChartShape -description: Learn how to generate stacked line graphs and configure axes in Excel spreadsheets using Telerik Document Processing's SpreadProcessing library. -type: how-to -page_title: Creating Stacked Line Graphs and Setting Axes in Excel with the SpreadProcessing library -meta_title: Creating Stacked Line Graphs and Setting Axes in Excel with the SpreadProcessing library -slug: generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape -tags: spreadprocessing,telerik, document, processing, floatingchartshape, line, graph, stacked, line, chart, x, axis, y -res_type: kb -ticketid: 1695510 ---- - -## Environment - -| Version | Product | Author | -| --- | --- | ---- | -| 2025.3.806 | SpreadProcessing |[Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov)| - -## Description - -This article demonstrates how to generate stacked ine graphs in Excel using the SpreadProcessing library. It also covers how to specify the data sources for the X-axis (dates) and Y-axis (numerical values). Additionally, it explains how to configure chart properties such as marker types, line styles, and visibility to customize the chart's appearance. - -Key topics addressed in this guide include: -- Creating line and stacked line charts in Excel using Telerik Document Processing. -- Assigning specific data ranges to the X-axis (e.g., dates) and Y-axis (numerical values). -- Customizing chart properties, including marker types for each series, line styles, and removing markers when needed. -- Plotting multiple columns of data while ensuring correct alignment between axes. - -![Stacked Line Chart](images/stacked-line-chart.png) - -## Solution - -To create a stacked line graph and configure the axes as desired, follow these steps: - -1. Define the `LineSeriesGroup` and set its grouping to `Stacked`. This ensures the graph is created as a stacked line chart. -2. Create individual `LineSeries` for each data column. Set the `Values` to represent numerical data and `Categories` to represent dates. -3. Define the axes for the chart. Set the `CategoryAxis` to plot dates and the `ValueAxis` for numerical values. -4. Create the chart and associate the `LineSeriesGroup` and axes with it. -5. Replace the default chart in the `FloatingChartShape` with the configured `DocumentChart`. Set the dimensions and add it to the worksheet. - -```csharp -var fileBytes = File.ReadAllBytes("fileWithChartData.xlsx"); - -Workbook workbook = xlsxFormatProvider.Import(fileBytes, null); -Worksheet worksheet = workbook.ActiveWorksheet; - -LineSeriesGroup seriesGroup = new LineSeriesGroup(); -seriesGroup.Grouping = SeriesGrouping.Stacked; - -// Make the series one by one -LineSeries lineSeries1 = new LineSeries(); -lineSeries1.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 1, 10, 1)); -lineSeries1.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); -lineSeries1.Marker = new Marker(); -lineSeries1.Marker.Symbol = MarkerStyle.Circle; -seriesGroup.Series.Add(lineSeries1); - -LineSeries lineSeries2 = new LineSeries(); -lineSeries2.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 2, 10, 2)); -lineSeries2.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); -lineSeries2.Marker = new Marker(); -lineSeries2.Marker.Symbol = MarkerStyle.Plus; -seriesGroup.Series.Add(lineSeries2); - -// Some axes -SolidFill lineColor = new SolidFill(new ThemableColor(ThemeColorType.Background2)); - -AxisGroup axisGroup = new AxisGroup(); -CategoryAxis categoryAxis = new CategoryAxis(); -categoryAxis.Outline.Fill = lineColor; -categoryAxis.MajorGridlines.Outline.Fill = lineColor; -axisGroup.CategoryAxis = categoryAxis; - -ValueAxis valueAxis = new ValueAxis(); -valueAxis.Outline.Fill = lineColor; -valueAxis.MajorGridlines.Outline.Fill = lineColor; -axisGroup.ValueAxis = valueAxis; - -// Here is the chart itself -DocumentChart documentChart = new DocumentChart(); -documentChart.SeriesGroups.Add(seriesGroup); -documentChart.PrimaryAxes = axisGroup; - -// We'll make a dummy FloatingChartShape and we'll replace the inner chart. -FloatingChartShape floatingChartShape = new FloatingChartShape(worksheet, new CellIndex(0, 5), new CellRange(0, 0, 4, 3), ChartType.Line); -floatingChartShape.Chart = documentChart; -floatingChartShape.Width = 400; -floatingChartShape.Height = 250; - -worksheet.Charts.Add(floatingChartShape); - -string exportFileName = "fileWithChart.xlsx"; -using (Stream str = File.OpenWrite(exportFileName)) -{ - xlsxFormatProvider.Export(workbook, str, null); -} -``` -By following these steps, you can generate a stacked line graph without markers and configure the axes to display the required data. - -## See Also - -* [SpreadProcessing Overview]({%slug radspreadprocessing-overview%}) +--- +title: Generating Stacked Line Charts and Configuring Axes in Excel Using FloatingChartShape +description: Learn how to generate stacked line dharts and configure axes in Excel spreadsheets using Telerik Document Processing's SpreadProcessing library. +type: how-to +page_title: Creating Stacked Line Charts and Setting Axes in Excel with the SpreadProcessing library +meta_title: Creating Stacked Line Charts and Setting Axes in Excel with the SpreadProcessing library +slug: generating-stacked-line-charts-configuring-axes-excel-floatingchartshape +tags: spread, processing, telerik, document, processing, floating, chart, shape, line, graph, stacked, line, chart, x, axis, y +res_type: kb +ticketid: 1695510 +--- + +## Environment + +| Version | Product | Author | +| --- | --- | ---- | +| 2025.3.806 | SpreadProcessing |[Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov)| + +## Description + +This article demonstrates how to generate stacked line charts in worksheets using the SpreadProcessing library. It also covers how to specify the data sources for the X-axis (dates) and Y-axis (numerical values). Additionally, it explains how to configure chart properties such as marker types, line styles, and visibility to customize the chart's appearance. + +Key topics addressed in this guide include: +- Creating line and stacked line charts in Excel using Telerik Document Processing. +- Assigning specific data ranges to the X-axis (e.g., dates) and Y-axis (numerical values). +- Customizing chart properties, including marker types for each series, line styles, and removing markers when needed. +- Plotting multiple columns of data while ensuring correct alignment between axes. + +![Stacked Line Chart](images/stacked-line-chart.png) + +## Solution + +To create a stacked line chart and configure the axes as desired, follow these steps: + +1. Define the `LineSeriesGroup` and set its grouping to `Stacked`. This ensures the chart is created as a stacked line chart. +2. Create individual `[LineSeries]({%slug radspreadprocessing-features-charts-series%}#lineseries)` for each data column. Set the `Values` to represent numerical data and `Categories` to represent dates. +3. Define the axes for the chart. Set the `CategoryAxis` to plot dates and the `ValueAxis` for numerical values. +4. Create the chart and associate the `LineSeriesGroup` and axes with it. +5. Replace the default chart in the `[FloatingChartShape]({%slug radspreadprocessing-features-charts-using-charts%}#floatingchartshape)` with the configured document chart`. Set the dimensions and add it to the worksheet. + +```csharp +var fileBytes = File.ReadAllBytes("fileWithChartData.xlsx"); + +Workbook workbook = xlsxFormatProvider.Import(fileBytes, null); +Worksheet worksheet = workbook.ActiveWorksheet; + +LineSeriesGroup seriesGroup = new LineSeriesGroup(); +seriesGroup.Grouping = SeriesGrouping.Stacked; + +// Make the series one by one +LineSeries lineSeries1 = new LineSeries(); +lineSeries1.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 1, 10, 1)); +lineSeries1.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); +lineSeries1.Marker = new Marker(); +lineSeries1.Marker.Symbol = MarkerStyle.Circle; +seriesGroup.Series.Add(lineSeries1); + +LineSeries lineSeries2 = new LineSeries(); +lineSeries2.Values = new WorkbookFormulaChartData(worksheet, new CellRange(1, 2, 10, 2)); +lineSeries2.Categories = new WorkbookFormulaChartData(worksheet, new CellRange(1, 0, 10, 0)); +lineSeries2.Marker = new Marker(); +lineSeries2.Marker.Symbol = MarkerStyle.Plus; +seriesGroup.Series.Add(lineSeries2); + +// Some axes +SolidFill lineColor = new SolidFill(new ThemableColor(ThemeColorType.Background2)); + +AxisGroup axisGroup = new AxisGroup(); +CategoryAxis categoryAxis = new CategoryAxis(); +categoryAxis.Outline.Fill = lineColor; +categoryAxis.MajorGridlines.Outline.Fill = lineColor; +axisGroup.CategoryAxis = categoryAxis; + +ValueAxis valueAxis = new ValueAxis(); +valueAxis.Outline.Fill = lineColor; +valueAxis.MajorGridlines.Outline.Fill = lineColor; +axisGroup.ValueAxis = valueAxis; + +// Here is the chart itself +DocumentChart documentChart = new DocumentChart(); +documentChart.SeriesGroups.Add(seriesGroup); +documentChart.PrimaryAxes = axisGroup; + +// We'll make a dummy FloatingChartShape and we'll replace the inner chart. +FloatingChartShape floatingChartShape = new FloatingChartShape(worksheet, new CellIndex(0, 5), new CellRange(0, 0, 4, 3), ChartType.Line); +floatingChartShape.Chart = documentChart; +floatingChartShape.Width = 400; +floatingChartShape.Height = 250; + +worksheet.Charts.Add(floatingChartShape); + +string exportFileName = "fileWithChart.xlsx"; +using (Stream str = File.OpenWrite(exportFileName)) +{ + xlsxFormatProvider.Export(workbook, str, null); +} +``` +By following these steps, you can generate a stacked line chart without markers and configure the axes to display the required data. + +## See Also + +* [SpreadProcessing Overview]({%slug radspreadprocessing-overview%}) * [Charts Overview]({%slug radspreadprocessing-features-charts%}) \ No newline at end of file diff --git a/libraries/radspreadprocessing/features/charts/overview.md b/libraries/radspreadprocessing/features/charts/overview.md index 73acf7aa..216ca40d 100644 --- a/libraries/radspreadprocessing/features/charts/overview.md +++ b/libraries/radspreadprocessing/features/charts/overview.md @@ -87,5 +87,5 @@ Combo charts combine two or more chart types to make the data easy to understand ## See Also -* [Generating Stacked Line Graphs and Configuring Axes in Excel Using FloatingChartShape]({%slug generating-stacked-line-graphs-configuring-axes-excel-floatingchartshape%}) +* [Generating Stacked Line Charts and Configuring Axes in Excel Using FloatingChartShape]({%slug generating-stacked-line-charts-configuring-axes-excel-floatingchartshape%}) From 5175006be21172bbee6e3ae985614aff74491144 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Thu, 18 Sep 2025 16:18:30 +0300 Subject: [PATCH 4/4] Fixed slugs and formatting. --- ...arts-configuring-axes-excel-floatingchartshape.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md b/knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md index 66f7aa60..813d82bf 100644 --- a/knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md +++ b/knowledge-base/generating-stacked-line-charts-configuring-axes-excel-floatingchartshape.md @@ -18,7 +18,7 @@ ticketid: 1695510 ## Description -This article demonstrates how to generate stacked line charts in worksheets using the SpreadProcessing library. It also covers how to specify the data sources for the X-axis (dates) and Y-axis (numerical values). Additionally, it explains how to configure chart properties such as marker types, line styles, and visibility to customize the chart's appearance. +This article demonstrates how to generate stacked line charts in worksheets using the [SpreadProcessing]({%slug radspreadprocessing-overview%}) library. It also covers how to specify the data sources for the X-axis (dates) and Y-axis (numerical values). Additionally, it explains how to configure chart properties such as marker types, line styles, and visibility to customize the chart's appearance. Key topics addressed in this guide include: - Creating line and stacked line charts in Excel using Telerik Document Processing. @@ -32,11 +32,11 @@ Key topics addressed in this guide include: To create a stacked line chart and configure the axes as desired, follow these steps: -1. Define the `LineSeriesGroup` and set its grouping to `Stacked`. This ensures the chart is created as a stacked line chart. -2. Create individual `[LineSeries]({%slug radspreadprocessing-features-charts-series%}#lineseries)` for each data column. Set the `Values` to represent numerical data and `Categories` to represent dates. -3. Define the axes for the chart. Set the `CategoryAxis` to plot dates and the `ValueAxis` for numerical values. -4. Create the chart and associate the `LineSeriesGroup` and axes with it. -5. Replace the default chart in the `[FloatingChartShape]({%slug radspreadprocessing-features-charts-using-charts%}#floatingchartshape)` with the configured document chart`. Set the dimensions and add it to the worksheet. +1. Define the **LineSeriesGroup** and set its grouping to **Stacked**. This ensures the chart is created as a stacked line chart. +2. Create individual [LineSeries]({%slug radspreadprocessing-features-charts-series%}#lineseries) for each data column. Set the **Values** to represent numerical data and **Categories** to represent dates. +3. Define the axes for the chart. Set the **CategoryAxis** to plot dates and the **ValueAxis** for numerical values. +4. Create the chart and associate the **LineSeriesGroup** and axes with it. +5. Replace the default chart in the [FloatingChartShape]({%slug radspreadprocessing-features-charts-using-charts%}#floatingchartshape) with the configured document chart. Set the dimensions and add it to the worksheet. ```csharp var fileBytes = File.ReadAllBytes("fileWithChartData.xlsx");