Skip to content

Commit 152827c

Browse files
committed
Fixes issue #415
1 parent db83b92 commit 152827c

File tree

5 files changed

+37
-18
lines changed

5 files changed

+37
-18
lines changed

docs/articles/fixedissues.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
## Version 5.7.0
44
### Fixed issues
55
### Features
6-
* External References
6+
* External links
77
* Adding, removing and break links to external workbooks.
88
* Updating external workbook value/defined name caches.
99
* Using external workbook caches in the formula parser.
10-
* Using loaded external package (workbook) in the formula parser.
11-
* Enhances sorting support.
10+
* Using loaded external packages (workbooks) in the formula parser.
11+
* Enhanced sorting
1212
* Pivot table auto sort - Sort on data fields using pivot areas.
1313
* Sort state in tables and auto filters.
1414
* Left-to-right sorting and sorting with custom lists.
1515

16-
* Support for Show Data As on pivot table data field
16+
* Support for Show Data As on pivot table data fields
1717
### Fixed issues
1818
* Support for ErrorBars on both X and Y axis on scatter, bubble and area charts.
1919
* Copying a worksheet to a new package fails with named styles in some cases.

src/EPPlus/Core/Worksheet/WorksheetCopyHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ internal static ExcelWorksheet Copy(ExcelWorksheets worksheets, string name, Exc
5858
pck.ZipPackage.Flush();
5959

6060
//Create a relation to the workbook
61-
string relID = worksheets.CreateWorkbookRel(name, sheetID, uriWorksheet, false);
61+
string relID = worksheets.CreateWorkbookRel(name, sheetID, uriWorksheet, false, null);
6262

6363
ExcelWorksheet added = new ExcelWorksheet(nsm, pck, relID, uriWorksheet, name, sheetID, worksheets.Count + pck._worksheetAdd, eWorkSheetHidden.Visible);
6464

src/EPPlus/ExcelWorksheet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ internal void LoadThreadedComments()
473473
/// <summary>
474474
/// The unique identifier for the worksheet.
475475
/// </summary>
476-
internal int SheetId { get { return (_sheetID); } }
476+
internal int SheetId { get { return (_sheetID); } set { _sheetID = value; } }
477477

478478
internal static bool NameNeedsApostrophes(string ws)
479479
{

src/EPPlus/ExcelWorksheets.cs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,19 @@ internal ExcelWorksheets(ExcelPackage pck, XmlNamespaceManager nsm, XmlNode topN
6262
string relId = sheetNode.Attributes.GetNamedItem("id", ExcelPackage.schemaRelationships).Value;
6363
int sheetID = Convert.ToInt32(sheetNode.Attributes["sheetId"].Value);
6464

65-
if (!String.IsNullOrEmpty(relId))
65+
if (string.IsNullOrEmpty(relId))
66+
{
67+
var ws = AddSheet(name, false, null, null, (XmlElement)sheetNode);
68+
ws.SheetId = sheetID;
69+
//_worksheets.Add(ix, ws);
70+
}
71+
else
6672
{
6773
var sheetRelation = pck.Workbook.Part.GetRelationship(relId);
6874
Uri uriWorksheet = UriHelper.ResolvePartUri(pck.Workbook.WorkbookUri, sheetRelation.TargetUri);
6975

70-
//add the worksheet
7176
int positionID = ix + _pck._worksheetAdd;
77+
//add the worksheet
7278
if (sheetRelation.RelationshipType.EndsWith("chartsheet"))
7379
{
7480
_worksheets.Add(ix, new ExcelChartsheet(_namespaceManager, _pck, relId, uriWorksheet, name, sheetID, positionID, null));
@@ -77,8 +83,8 @@ internal ExcelWorksheets(ExcelPackage pck, XmlNamespaceManager nsm, XmlNode topN
7783
{
7884
_worksheets.Add(ix, new ExcelWorksheet(_namespaceManager, _pck, relId, uriWorksheet, name, sheetID, positionID, null));
7985
}
80-
ix++;
8186
}
87+
ix++;
8288
}
8389
}
8490
}
@@ -135,8 +141,8 @@ public ExcelWorksheet Add(string Name)
135141
ExcelWorksheet worksheet = AddSheet(Name, false, null);
136142
return worksheet;
137143
}
138-
private ExcelWorksheet AddSheet(string Name, bool isChart, eChartType? chartType, ExcelPivotTable pivotTableSource = null)
139-
{
144+
private ExcelWorksheet AddSheet(string Name, bool isChart, eChartType? chartType, ExcelPivotTable pivotTableSource = null, XmlElement sheetElement=null)
145+
{
140146
lock (_worksheets)
141147
{
142148
Name = ValidateFixSheetName(Name);
@@ -153,7 +159,7 @@ private ExcelWorksheet AddSheet(string Name, bool isChart, eChartType? chartType
153159
worksheetXml.Save(streamWorksheet);
154160
_pck.ZipPackage.Flush();
155161

156-
string rel = CreateWorkbookRel(Name, sheetID, uriWorksheet, isChart);
162+
string rel = CreateWorkbookRel(Name, sheetID, uriWorksheet, isChart, sheetElement);
157163

158164
int positionID = _worksheets.Count + _pck._worksheetAdd;
159165
ExcelWorksheet worksheet;
@@ -246,19 +252,22 @@ public ExcelChartsheet AddStockChart(string Name, ExcelRangeBase CategorySerie,
246252
}
247253

248254

249-
internal string CreateWorkbookRel(string Name, int sheetID, Uri uriWorksheet, bool isChart)
255+
internal string CreateWorkbookRel(string Name, int sheetID, Uri uriWorksheet, bool isChart, XmlElement sheetElement)
250256
{
251257
//Create the relationship between the workbook and the new worksheet
252258
var rel = _pck.Workbook.Part.CreateRelationship(UriHelper.GetRelativeUri(_pck.Workbook.WorkbookUri, uriWorksheet), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/" + (isChart ? "chartsheet" : "worksheet"));
253259
_pck.ZipPackage.Flush();
254260

255261
//Create the new sheet node
256-
XmlElement worksheetNode = _pck.Workbook.WorkbookXml.CreateElement("sheet", ExcelPackage.schemaMain);
257-
worksheetNode.SetAttribute("name", Name);
258-
worksheetNode.SetAttribute("sheetId", sheetID.ToString());
259-
worksheetNode.SetAttribute("id", ExcelPackage.schemaRelationships, rel.Id);
262+
if(sheetElement==null)
263+
{
264+
sheetElement = _pck.Workbook.WorkbookXml.CreateElement("sheet", ExcelPackage.schemaMain);
265+
sheetElement.SetAttribute("name", Name);
266+
sheetElement.SetAttribute("sheetId", sheetID.ToString());
267+
TopNode.AppendChild(sheetElement);
268+
}
269+
sheetElement.SetAttribute("id", ExcelPackage.schemaRelationships, rel.Id);
260270

261-
TopNode.AppendChild(worksheetNode);
262271
return rel.Id;
263272
}
264273

src/EPPlusTest/Issues.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2246,6 +2246,16 @@ public void Issue410()
22462246
SaveWorkbook("test-out.xlsx", package);
22472247
}
22482248
}
2249+
[TestMethod]
2250+
public void Issue415()
2251+
{
2252+
using (var package = OpenTemplatePackage("Issue415.xlsm"))
2253+
{
2254+
var wb = package.Workbook;
2255+
SaveAndCleanup(package);
2256+
}
2257+
}
2258+
22492259
}
22502260
}
22512261

0 commit comments

Comments
 (0)