Проблема с открытием файла Excel, созданного с помощью открытого пакета слепков XML DocumentFormat.OpenXml.
В этом файле не было ошибок, которые нужно исправить после открытия. Но все равно выдает предупреждение при открытии файла Excel.
Любой обходной путь для разрешения или проверки сгенерированного Excel на наличие ошибок.
Ниже приведен метод, который я использую для создания документа Excel.
public byte[] Create()
{
byte[] excelBytes;
using (var memoryStream = new MemoryStream())
{
//Open the copied template workbook.
using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = myWorkbook.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
workbookPart.Workbook.AppendChild(new FileVersion { ApplicationName = "Microsoft Office Excel" });
//Add Sheets to the Workbook.
var sheets = myWorkbook.WorkbookPart.Workbook.AppendChild(new Sheets());
// Create Styles and Insert into Workbook
WorkbookStylesPart stylePart = myWorkbook.WorkbookPart.AddNewPart<WorkbookStylesPart>();
stylePart.Stylesheet = new CustomStylesheet();
stylePart.Stylesheet.Save();
List<string> headerNames = GetPropertyInfo<T>().Select(x => x.Replace("__", " ")).ToList();
foreach (KeyValuePair<string, List<T>> data in objectsToExportData)
{
int sheetindex = 1;
WorksheetPart worksheetPart = myWorkbook.WorkbookPart.AddNewPart<WorksheetPart>();
string relId = workbookPart.GetIdOfPart(worksheetPart);
SheetData sheetData = CreateSheetData(data.Value, headerNames, stylePart);
worksheetPart.Worksheet = new Worksheet();
int numCols = headerNames.Count;
int width = headerNames.Max(h => h.Length) + 5;
Columns columns = new Columns();
for (int col = 0; col < numCols; col++)
{
Column c = CreateColumnData((UInt32)col + 1, (UInt32)numCols + 1, width);
columns.Append(c);
}
worksheetPart.Worksheet.AppendChild(columns);
worksheetPart.Worksheet.AppendChild(sheetData);
//Append a new worksheet and associate it with the workbook.
sheets.AppendChild(new Sheet
{
Id = myWorkbook.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = (uint)sheetindex,
Name = data.Key
});
//Sheet sheet = new Sheet { Name = data.Key, SheetId = (uint)sheetindex, Id = relId };
//sheets.AppendChild(sheet);
//worksheetPart.Worksheet.Save();
sheetindex++;
}
//workbookPart.Workbook.Append(sheets);
//myWorkbook.WorkbookPart.Workbook = workbook;
myWorkbook.WorkbookPart.Workbook.Save();
myWorkbook.Close();
}
excelBytes = memoryStream.ToArray();
}
return excelBytes;
}