I have a template .xlsx file which I open with ClosedXML, populate with necessary info, and depending on the user options, delete some irrelevant sheets (mostly the empty ones). Then I save the file, but when the user tries to open the file, Excel complains about unreadable content (a common error, I know).
My sheets contain NamedRanges and Tables, and there are also some pivot tables. I try to delete these all explicitly before deleting the actual sheet, but I think some reference somewhere still remains.
I attach a simplified version of the empty template file, some code that shows how I delete the sheets, and the resultant file that has the 'unreadable content'.
We're on Excel 2010, Windows 7 32b, ClosedXML 0.76.0.0
Please advise.
``` C#
private void DeleteIrrelevantSheet(XLWorkbook wb)
{
new string[] {
"YieldCurvePivot",
"GeneratedYieldCurveEntries"
}.ForEach(s => DeleteSheetAndTable(wb, s));
}
private void DeleteSheetAndTable(XLWorkbook wb, string sheetName)
{
var sheet = wb.Worksheet(sheetName);
//Delete named ranges on workbook level pointing to sheet
string[] namedRangesToDelete = wb.NamedRanges.Where(nr => nr.RefersTo.Contains(sheetName)).Select(nr => nr.Name).ToArray();
foreach (var nr in namedRangesToDelete)
{
wb.NamedRanges.Delete(nr);
}
//Delete named ranges on sheet level pointing to sheet
foreach (var sheet2 in wb.Worksheets)
{
namedRangesToDelete = sheet2.NamedRanges.Where(nr => nr.RefersTo.Contains(sheetName)).Select(nr => nr.Name).ToArray();
foreach (var nr in namedRangesToDelete)
{
sheet2.NamedRanges.Delete(nr);
}
}
//Delete tables
var tablesToDelete = sheet.Tables.Select(t => t.Name).ToArray();
foreach (var table in tablesToDelete)
{
sheet.Tables.Remove(table);
}
//Delete pivot tables
sheet.PivotTables.DeleteAll();
sheet.Delete();
}
```
Comments: If someone can help me pinpoint what is going wrong in the XML files in the .xlsx file, I can try to write a patch. But I don't know the schema well enough to find the problem.
My sheets contain NamedRanges and Tables, and there are also some pivot tables. I try to delete these all explicitly before deleting the actual sheet, but I think some reference somewhere still remains.
I attach a simplified version of the empty template file, some code that shows how I delete the sheets, and the resultant file that has the 'unreadable content'.
We're on Excel 2010, Windows 7 32b, ClosedXML 0.76.0.0
Please advise.
``` C#
private void DeleteIrrelevantSheet(XLWorkbook wb)
{
new string[] {
"YieldCurvePivot",
"GeneratedYieldCurveEntries"
}.ForEach(s => DeleteSheetAndTable(wb, s));
}
private void DeleteSheetAndTable(XLWorkbook wb, string sheetName)
{
var sheet = wb.Worksheet(sheetName);
//Delete named ranges on workbook level pointing to sheet
string[] namedRangesToDelete = wb.NamedRanges.Where(nr => nr.RefersTo.Contains(sheetName)).Select(nr => nr.Name).ToArray();
foreach (var nr in namedRangesToDelete)
{
wb.NamedRanges.Delete(nr);
}
//Delete named ranges on sheet level pointing to sheet
foreach (var sheet2 in wb.Worksheets)
{
namedRangesToDelete = sheet2.NamedRanges.Where(nr => nr.RefersTo.Contains(sheetName)).Select(nr => nr.Name).ToArray();
foreach (var nr in namedRangesToDelete)
{
sheet2.NamedRanges.Delete(nr);
}
}
//Delete tables
var tablesToDelete = sheet.Tables.Select(t => t.Name).ToArray();
foreach (var table in tablesToDelete)
{
sheet.Tables.Remove(table);
}
//Delete pivot tables
sheet.PivotTables.DeleteAll();
sheet.Delete();
}
```
Comments: If someone can help me pinpoint what is going wrong in the XML files in the .xlsx file, I can try to write a patch. But I don't know the schema well enough to find the problem.