Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
74a6bc4
Fixed some trendline issues
JanKallman Jun 4, 2026
e16b4c2
Removed, renamed and fixed a few issues
JanKallman Jun 5, 2026
105f3f1
Added new ActualPosition property for axis
JanKallman Jun 5, 2026
181c1ee
Re-implemented pie-chart and explosion
OssianEPPlus Jun 8, 2026
65d52da
Fixed trendline formulas to add superscript to textboxs
JanKallman Jun 8, 2026
74cef87
Added debug properties to pie slices
OssianEPPlus Jun 8, 2026
60a913e
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 8, 2026
2d73a98
Deactivated debug props + cleanup
OssianEPPlus Jun 8, 2026
2a887cd
Simplified constructor
OssianEPPlus Jun 8, 2026
a3b7262
Fixed most trendline sub/superscript issues + rect
OssianEPPlus Jun 8, 2026
b83e331
Added margins to rect
OssianEPPlus Jun 8, 2026
344d7d5
Half fix for duplication
OssianEPPlus Jun 8, 2026
229d086
Fixed datalabel positions. Messily.
OssianEPPlus Jun 9, 2026
77b7382
Fixed datalabels more. Started fixing centering trendline
OssianEPPlus Jun 9, 2026
73c9625
Fixed DrawingTextBox duplicate properties
OssianEPPlus Jun 9, 2026
976e1ae
Fixed Most of trendline centering
OssianEPPlus Jun 9, 2026
5a394ce
Added spacing in trendline strings
OssianEPPlus Jun 9, 2026
ab41985
Fixed stacking axis
JanKallman Jun 9, 2026
b2fb1d5
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Jun 9, 2026
7419417
Tweaked tests. Added recalculation to textbody
OssianEPPlus Jun 9, 2026
7d7113a
Fixed positioning of stacked axis
JanKallman Jun 9, 2026
bd0f235
WIP:Axis positioning and sizeing
JanKallman Jun 9, 2026
45b069b
Fixed line-ending issue
OssianEPPlus Jun 9, 2026
df7cdaa
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 9, 2026
a84dcf6
Verified vertical alignment also functional
OssianEPPlus Jun 9, 2026
388c06e
Changed TextBox. GroupItem realtime. + margin grp
OssianEPPlus Jun 10, 2026
34c04af
Added tests for new textbox
OssianEPPlus Jun 10, 2026
29cd62c
Fixed alignment bug and in ChartTitle.DisplayedText
OssianEPPlus Jun 10, 2026
f8e83b6
Partial trendline fix
OssianEPPlus Jun 10, 2026
859353a
Partial fix for trendline autosize alignment issue
OssianEPPlus Jun 10, 2026
03a5f5d
Functional Trendlines fix
OssianEPPlus Jun 10, 2026
796e9c9
Fixed center-alignment for shapes
OssianEPPlus Jun 11, 2026
1c09dd8
Fixed sIcon location on datalabel
OssianEPPlus Jun 11, 2026
9cae12a
Fixes axis position
JanKallman Jun 11, 2026
7b1403f
Fixed width of textbox
OssianEPPlus Jun 11, 2026
3ed60c4
Fixed multiple paragraph test
OssianEPPlus Jun 15, 2026
dd28f16
Temporary fix for exact font
OssianEPPlus Jun 15, 2026
6531b1b
WIP:Added first test for errorbars
JanKallman Jun 15, 2026
9fd6e4b
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Jun 15, 2026
fc635bb
Fixed some issues on chart axis and legends.
JanKallman Jun 16, 2026
ade4d16
Partial fix for datalabels
OssianEPPlus Jun 16, 2026
da78261
Fixed background for datalabels
OssianEPPlus Jun 16, 2026
d54fccf
Transferred piechart legend special case
OssianEPPlus Jun 16, 2026
f40e61e
Fixed label position on horizontal axis
JanKallman Jun 16, 2026
dd18c5a
Fixes axis label alignment and label positioning
JanKallman Jun 16, 2026
1e0beae
Fixed centering of piechart legend
OssianEPPlus Jun 16, 2026
31d08bc
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 16, 2026
8df3dc4
Start of datalabels for barcharts
OssianEPPlus Jun 16, 2026
5356d8c
Fixed out-end for bar-charts
OssianEPPlus Jun 17, 2026
2b6ff32
Functional datalabels
OssianEPPlus Jun 17, 2026
a84b1d5
Columnn and bar charts correct
OssianEPPlus Jun 17, 2026
f1ab07f
fixed stacked column pos datalabels
OssianEPPlus Jun 17, 2026
c576942
Start of better datalabel system+debug
OssianEPPlus Jun 17, 2026
f8afb27
Started Work on error bars
JanKallman Jun 17, 2026
4248021
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Jun 17, 2026
8d11438
New position functional for center and in-base
OssianEPPlus Jun 17, 2026
b700909
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 17, 2026
48bac1d
Made labels work for inEnd and inBase again
OssianEPPlus Jun 17, 2026
62b16c9
Added outEnd
OssianEPPlus Jun 17, 2026
3337486
Simplified initilization in barChart
OssianEPPlus Jun 17, 2026
7b47db4
Made new system functional for bars AND columns
OssianEPPlus Jun 17, 2026
6bf43e0
Ensured mix of series and custom datalabels get read
OssianEPPlus Jun 18, 2026
d25f9db
Added support for negative columns + margin
OssianEPPlus Jun 18, 2026
6b38834
Ensured works for bar charts as well
OssianEPPlus Jun 18, 2026
9e3ce65
Added simpler but somewhat unclear method
OssianEPPlus Jun 18, 2026
d5ea8ab
Attempting to use functionality in pie item
OssianEPPlus Jun 18, 2026
f6db912
Fixed several pie chart datalabel bugs
OssianEPPlus Jun 18, 2026
c0770cd
Fixed bugs and cleaned up datalabels
OssianEPPlus Jun 22, 2026
3bb4be8
Cleanup and added all pie datalabels to same file
OssianEPPlus Jun 22, 2026
e3695a8
Start of adding svg to html export
OssianEPPlus Jun 22, 2026
c54a8d5
Merge branch 'develop9' into feature/DrawingRendererRefactor
OssianEPPlus Jun 22, 2026
64b8bbb
Render of Errorbars for line charts
JanKallman Jun 22, 2026
273be36
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Jun 22, 2026
18ec82f
Added html tests
OssianEPPlus Jun 22, 2026
0df0bcd
Fixed Errorbars issue
JanKallman Jun 22, 2026
7c46aaa
Added category test
OssianEPPlus Jun 22, 2026
1341b01
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 22, 2026
15fbf9d
Fixed gapwidth for barcharts
OssianEPPlus Jun 22, 2026
0327283
Strong named EPPlus.DrawingRenderer and added tests for .NET 4.6.2.
JanKallman Jun 22, 2026
cb97188
Added stylemanager styling
OssianEPPlus Jun 22, 2026
8f39b97
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Jun 22, 2026
1922b10
Fixed ellipse items having rect type
OssianEPPlus Jun 22, 2026
19fbe51
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Jun 23, 2026
8dcdd7b
Fixed trendline label positioning
JanKallman Jun 23, 2026
5ee696a
Fixed trendline label positioning.
JanKallman Jun 23, 2026
8f99a32
Fixed databar bug + styling border issue
OssianEPPlus Jun 23, 2026
07e7ee1
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 23, 2026
2ecc4d1
Fixed null color for shapes and charts
JanKallman Jun 23, 2026
c2f3e88
Fixed blip fills
JanKallman Jun 23, 2026
a60e584
Start of fix for title element
OssianEPPlus Jun 23, 2026
1559914
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Jun 23, 2026
08439a7
Fixed title bug in epplus
OssianEPPlus Jun 24, 2026
396227b
Fixed one test-failure
OssianEPPlus Jun 24, 2026
3d451eb
Fixed failing tests for Archivo Narrow
swmal Jun 24, 2026
c91c853
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
swmal Jun 24, 2026
1d14074
Work in progress: removing calls to static methods to OpenTypeFonts d…
swmal Jun 25, 2026
80c92b5
Replace global font singleton with per-workbook RenderContext in rend…
Jun 26, 2026
91b9b3f
Add per-workbook RenderContext on ExcelWorkbook and thread it through…
swmal Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/EPPlus.DrawingRenderer.Tests/Chart/BarChartTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,42 @@ public void GenerateSvgForBarCharts2()
}
}
}

[TestMethod]
public void DatalabelBarCharts()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("BarChartForSvgDatalabelsBasic.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
var drawings = ws.Drawings;
var ix = 1;

for (int i = ix; i < drawings.Count; i++)
{
var svg = drawings[i].ToSvg();
SaveTextFileToWorkbook($"svg\\BarChartDataLabels{ix++}.svg", svg);
}
}
}


[TestMethod]
public void NegativeDatalabelBarCharts()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("negativeDatalabels.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
var drawings = ws.Drawings;
var ix = 0;

for (int i = ix; i < drawings.Count; i++)
{
var svg = drawings[i].ToSvg();
SaveTextFileToWorkbook($"svg\\NegativeLabels{ix++}.svg", svg);
}
}
}
}
}
2 changes: 1 addition & 1 deletion src/EPPlus.DrawingRenderer.Tests/Chart/ColumnChartTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public void GenerateSvgForColumnCharts1()

//var ix = 1;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\ChartForSvg_ind{ix++}.svg", svg);

var ix = 0;
Expand Down
50 changes: 50 additions & 0 deletions src/EPPlus.DrawingRenderer.Tests/Chart/ErrorbarsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;

namespace EPPlus.Export.ImageRenderer.Tests.Chart
{
[TestClass]
public class ErrorbarsTests : TestBase
{
[TestMethod]
public void GenerateSvgForErrorbars_Sheet1()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("Errorbars.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
//var ix = 4;
//var c = ws.Drawings[ix];
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\Error_sheet1_ind{ix++}.svg", svg);

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\Errorbar_sheet1_{ix++}.svg", svg);
}
}
}
[TestMethod]
public void GenerateSvgForErrorbars_Column_Sheet2()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("Errorbars.xlsx"))
{
var ws = p.Workbook.Worksheets[1];
//var ix = 4;
//var c = ws.Drawings[ix];
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\Error_sheet1_ind{ix++}.svg", svg);

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\Errorbar_sheet2_{ix++}.svg", svg);
}
}
}
}
}
63 changes: 43 additions & 20 deletions src/EPPlus.DrawingRenderer.Tests/Chart/LineChartToSvgTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public void GenerateSvgForLineCharts_sheet1()
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\ChartForSvg_ind{ix++}.svg", svg);

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
for(int i = 0; i< ws.Drawings.Count; i++)
{
var c = ws.Drawings[i];
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\ChartForSvg{ix++}.svg", svg);
SaveTextFileToWorkbook($"svg\\ChartForSvg{i}.svg", svg);
}
}
}
Expand Down Expand Up @@ -128,64 +128,65 @@ public void GenerateSvgForLineCharts()
}
}
}

[TestMethod]
public void GenerateSuperScript()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("Superscript.xlsx"))
using (var p = OpenTemplatePackage("ChartForSvg_SecondaryAxis.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
//var ix = 1;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//SaveTextFileToWorkbook($"svg\\LineChartForSvg_Single{ix++}.svg", svg);
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\ChartForSvg_sheet2_{ix++}.svg", svg);
var ix = 1;
foreach (var c in ws.Drawings)
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\ss{ix++}.svg", svg);
SaveTextFileToWorkbook($"svg\\ChartForSvg_SecAxis{ix++}.svg", svg);
}
}
}

[TestMethod]
public void GenerateSvgForCharts_SecondaryAxis()
public void GenerateSvgForCharts_SecondaryAxis_sheet2()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("ChartForSvg_SecondaryAxis.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
//var ix = 3;
var ws = p.Workbook.Worksheets[1];
//var ix = 2;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//SaveTextFileToWorkbook($"svg\\ChartForSvg_sheet2_{ix++}.svg", svg);
//SaveTextFileToWorkbook($"svg\\ChartForSvg_Sheet2_SecAxis{ix++}.svg", svg);
var ix = 1;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\ChartForSvg_SecAxis{ix++}.svg", svg);
SaveTextFileToWorkbook($"svg\\ChartForSvg_Sheet2_SecAxis{ix++}.svg", svg);
}
}
}
[TestMethod]
public void GenerateSvgForCharts_SecondaryAxis_sheet2()
public void GenerateSvgForCharts_SecondaryAxis_sheet3()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("ChartForSvg_SecondaryAxis.xlsx"))
{
var ws = p.Workbook.Worksheets[1];
//var ix = 2;
var ws = p.Workbook.Worksheets[2];
//var ix = 1;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//SaveTextFileToWorkbook($"svg\\ChartForSvg_Sheet2_SecAxis{ix++}.svg", svg);
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\ChartForSvg_sheet3_{ix++}.svg", svg);
var ix = 1;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\ChartForSvg_Sheet2_SecAxis{ix++}.svg", svg);
SaveTextFileToWorkbook($"svg\\ChartForSvg_Sheet3_SecAxis{ix++}.svg", svg);
}
}
}

[TestMethod]
public void GenerateSimplestChart()
{
Expand Down Expand Up @@ -280,5 +281,27 @@ public void GenerateSimpleLineChart()
SaveTextFileToWorkbook($"svg\\defChartLine3Points.svg", svg);
}
}
[TestMethod]
public void GenerateSvgForLineCharts_AxisAlign_sheet1()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("HorizontalAxisAlign.xlsx"))
{
var ws = p.Workbook.Worksheets[0];

//var ix = 3;
//var c = ws.Drawings[ix];
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\HorizontalAxisChartForSvg{ix++}.svg", svg);

for (int i = 0; i < ws.Drawings.Count; i++)
{
var c = ws.Drawings[i];
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\HorizontalAxisChartForSvg{i}.svg", svg);
}
}
}

}
}
82 changes: 2 additions & 80 deletions src/EPPlus.DrawingRenderer.Tests/Chart/PieChartTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,98 +12,20 @@ public class PieChartTests : TestBase
{

[TestMethod]
public void ReadAndGenerateExcelPieChartSvgs()
public void ReadAndCreateSvgsAll()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("PieChartSvgALL.xlsx"))
{
var ws = p.Workbook.Worksheets[0];

for(int i = 0; i < p.Workbook.Worksheets.Count; i++)
{
ws = p.Workbook.Worksheets[i];
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\PieChartSvgALL\\s{i}_{ws.Name}_{c.Name}.svg", svg);
}
}
}
}


[TestMethod]
public void ReadAndGenerateExcelPieChartPointExplosion()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("PointExplosionStandAlone.xlsx"))
{
var ws = p.Workbook.Worksheets[0];

for (int i = 0; i < p.Workbook.Worksheets.Count; i++)
{
ws = p.Workbook.Worksheets[i];
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\PointExplosionStandAlone\\s{i}_{ws.Name}_{c.Name}.svg", svg);
}
}
}
}

[TestMethod]
public void BasicPieChart()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("BasicPieChart.xlsx"))
{
var ws = p.Workbook.Worksheets[0];

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\BasicPieChart{ix++}.svg", svg);
}
}
}

[TestMethod]
public void Datalabels()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("PieChartDlblsOrig.xlsx"))
{
var ws = p.Workbook.Worksheets[0];

for (int i = 0; i < p.Workbook.Worksheets.Count; i++)
{
ws = p.Workbook.Worksheets[i];
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\PieChartDlbls\\s{i}_{ws.Name}_{c.Name}.svg", svg);
}
}
}
}

[TestMethod]
public void Datalabels2()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("PieChartDlblsInsideEndOnly.xlsx"))
{
var ws = p.Workbook.Worksheets[0];

for (int i = 0; i < p.Workbook.Worksheets.Count; i++)
{
ws = p.Workbook.Worksheets[i];
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\PieChartDlbls\\s{i}_{ws.Name}_{c.Name}.svg", svg);
SaveTextFileToWorkbook($"svg\\PieChartSvgALL\\s{i}_{ws.Name}_{c.Name}.svg", svg);
}
}
}
Expand Down
28 changes: 25 additions & 3 deletions src/EPPlus.DrawingRenderer.Tests/Chart/TrendlineTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ public void GenerateSvgForTrendlines_Sheet1()
using (var p = OpenTemplatePackage("Trendlines.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
//var ix = 2;
//var ix = 4;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\Trendline_sheet1_ind{ix++}.svg", svg);

var ix = 0;
Expand All @@ -26,6 +26,28 @@ public void GenerateSvgForTrendlines_Sheet1()
}
}
}

[TestMethod]
public void TrendlineAlt()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("TrendlineAlt.xlsx"))
{
var ws = p.Workbook.Worksheets[0];
//var ix = 4;
//var c = ws.Drawings[ix];
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\Trendline_sheet1_ind{ix++}.svg", svg);

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\TrendlineAlt_sheet1_{ix++}.svg", svg);
}
}
}

[TestMethod]
public void GenerateSvgForTrendlines_Sheet2()
{
Expand All @@ -36,7 +58,7 @@ public void GenerateSvgForTrendlines_Sheet2()

//var ix = 3;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\Trendline_sheet1_ind{ix++}.svg", svg);

var ix = 0;
Expand Down
Loading
Loading