Skip to content

Commit 092a03d

Browse files
authored
Merge pull request #1207 from EPPlusSoftware/bug/jsonencode_hyperlinkcopy
Fixes json encoding and hyperlink copy issues
2 parents 6bb51dd + cf2a74a commit 092a03d

File tree

8 files changed

+23
-12
lines changed

8 files changed

+23
-12
lines changed

src/EPPlus/Core/Worksheet/WorksheetCopyHelper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ private static void CopyDrawing(ExcelPackage pck, XmlNamespaceManager nsm, Excel
265265
for (int i = 0; i < copy.Drawings.Count; i++)
266266
{
267267
var draw = copy.Drawings[i];
268-
CopyDrawingRels(draw, pck, added, partDraw);
268+
CopyDrawingRels(draw, pck, added, partDraw, ref drawXml);
269269
}
270270

271271
//rewrite the drawing xml with the new relID's
@@ -353,12 +353,10 @@ private static XmlNode GetMatchingNode(XmlDocument drawXml, XmlNode node, XmlNam
353353
return retNode;
354354
}
355355

356-
private static void CopyDrawingRels(ExcelDrawing copyDraw, ExcelPackage pck, ExcelWorksheet added, ZipPackagePart partDraw)
356+
private static void CopyDrawingRels(ExcelDrawing copyDraw, ExcelPackage pck, ExcelWorksheet added, ZipPackagePart partDraw, ref XmlDocument drawXml)
357357
{
358-
//var draw = drawings[i];
359358
var copy = copyDraw._drawings.Worksheet;
360359
var uriDraw = partDraw.Uri;
361-
var drawXml = copyDraw._drawings.DrawingXml;
362360
if (copyDraw is ExcelChart chart)
363361
{
364362
var xml = chart.ChartXml.InnerXml;
@@ -438,7 +436,7 @@ private static void CopyDrawingRels(ExcelDrawing copyDraw, ExcelPackage pck, Exc
438436
{
439437
for(int j = 0; j < grpDraw.Drawings.Count; j++)
440438
{
441-
CopyDrawingRels(grpDraw.Drawings[j], pck, added, partDraw);
439+
CopyDrawingRels(grpDraw.Drawings[j], pck, added, partDraw, ref drawXml);
442440
}
443441
}
444442

@@ -447,7 +445,7 @@ private static void CopyDrawingRels(ExcelDrawing copyDraw, ExcelPackage pck, Exc
447445
ZipPackageRelationship rel;
448446
if (string.IsNullOrEmpty(copyDraw.HypRel.Target))
449447
{
450-
rel = partDraw.CreateRelationship(copyDraw.HypRel.TargetUri.OriginalString, copyDraw.HypRel.TargetMode, copyDraw.HypRel.RelationshipType);
448+
rel = partDraw.CreateRelationship(copyDraw.HypRel.TargetUri, copyDraw.HypRel.TargetMode, copyDraw.HypRel.RelationshipType);
451449
}
452450
else
453451
{

src/EPPlus/Export/JsonExport/JsonExport.async.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ internal protected async Task WriteCellDataAsync(StreamWriter sw, ExcelRangeBase
5252
if (hasComment)
5353
{
5454
var comment = ws.Comments[commentIx];
55-
await WriteItemAsync(sw, $"\"comment\":\"{comment.Text}\"");
55+
await WriteItemAsync(sw, $"\"comment\":\"{JsonEscape(comment.Text)}\"");
5656
}
5757

5858
if (c == dr._toCol)

src/EPPlus/Export/JsonExport/JsonExport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ internal protected void WriteCellData(StreamWriter sw, ExcelRangeBase dr, int he
5959
if(hasComment)
6060
{
6161
var comment = ws.Comments[commentIx];
62-
WriteItem(sw, $"\"comment\":\"{comment.Text}\"");
62+
WriteItem(sw, $"\"comment\":\"{JsonEscape(comment.Text)}\"");
6363
}
6464

6565
if(c == dr._toCol)

src/EPPlus/Export/JsonExport/JsonRangeExport.async.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private async Task WriteColumnDataAsync(StreamWriter sw)
3030
await WriteStartAsync(sw);
3131
if (_settings.FirstRowIsHeader)
3232
{
33-
await WriteItemAsync(sw, $"\"name\":\"{_range.GetCellValue<string>(0, i)}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
33+
await WriteItemAsync(sw, $"\"name\":\"{JsonEscape(_range.GetCellValue<string>(0, i))}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
3434
}
3535
if (_settings.AddDataTypesOn == eDataTypeOn.OnColumn)
3636
{

src/EPPlus/Export/JsonExport/JsonRangeExport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ private void WriteColumnData(StreamWriter sw)
4343
WriteStart(sw);
4444
if (_settings.FirstRowIsHeader)
4545
{
46-
WriteItem(sw, $"\"name\":\"{_range.GetCellValue<string>(0,i)}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
46+
WriteItem(sw, $"\"name\":\"{JsonEscape(_range.GetCellValue<string>(0,i))}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
4747
}
4848
if (_settings.AddDataTypesOn==eDataTypeOn.OnColumn)
4949
{

src/EPPlus/Export/JsonExport/JsonTableExport.async.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ private async Task WriteColumnDataAsync(StreamWriter sw)
3939
for (int i = 0; i < _table.Columns.Count; i++)
4040
{
4141
await WriteStartAsync(sw);
42-
await WriteItemAsync(sw, $"\"name\":\"{_table.Columns[i].Name}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
42+
await WriteItemAsync(sw, $"\"name\":\"{JsonEscape(_table.Columns[i].Name)}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
4343
if (_settings.AddDataTypesOn == eDataTypeOn.OnColumn)
4444
{
4545
var dt = HtmlRawDataProvider.GetHtmlDataTypeFromValue(_table.DataRange.GetCellValue<object>(0, i));

src/EPPlus/Export/JsonExport/JsonTableExport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ private void WriteColumnData(StreamWriter sw)
5151
for (int i = 0; i < _table.Columns.Count; i++)
5252
{
5353
WriteStart(sw);
54-
WriteItem(sw, $"\"name\":\"{_table.Columns[i].Name}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
54+
WriteItem(sw, $"\"name\":\"{JsonEscape(_table.Columns[i].Name)}\"", false, _settings.AddDataTypesOn == eDataTypeOn.OnColumn);
5555
if (_settings.AddDataTypesOn == eDataTypeOn.OnColumn)
5656
{
5757
var dt = HtmlRawDataProvider.GetHtmlDataTypeFromValue(_table.DataRange.GetCellValue<object>(0, i));

src/EPPlusTest/Issues.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5571,5 +5571,18 @@ public void s551_2()
55715571
}
55725572
}
55735573
}
5574+
[TestMethod]
5575+
public void i1203()
5576+
{
5577+
using (var p = OpenTemplatePackage("i1203.xlsx"))
5578+
{
5579+
var sheet1 = p.Workbook.Worksheets[0];
5580+
var sheet2 = p.Workbook.Worksheets.Add("sheet2", sheet1);
5581+
Assert.AreEqual(sheet1.Drawings[0].Hyperlink.OriginalString, sheet2.Drawings[0].Hyperlink.OriginalString);
5582+
Assert.IsTrue(sheet1.Drawings[0].As.Picture.Image.ImageBytes.SequenceEqual(sheet2.Drawings[0].As.Picture.Image.ImageBytes));
5583+
5584+
SaveAndCleanup(p);
5585+
}
5586+
}
55745587
}
55755588
}

0 commit comments

Comments
 (0)