打开由XML XML DocumentFormat.OpenXml块包生成的Excel文件时出现问题。 打开后,此文件未显示任何要解决的错误。但是在打开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;
}