问题描述
使用OpenXml
库保存和打开文件时出现问题。这是我的代码:
public static void SaveExcel(List<Dictionary<string,object>> listData,List<string> entityTypes,string appName)
{
using (var ms = new MemoryStream())
using (var excel = SpreadsheetDocument.Create(ms,SpreadsheetDocumentType.Workbook))
{
var workBookPart = excel.AddWorkbookPart();
workBookPart.Workbook = new Workbook();
var workSheetPart = workBookPart.AddNewPart<WorksheetPart>();
var workSheetData = new SheetData();
workSheetPart.Worksheet = new Worksheet(workSheetData);
var sheets = workBookPart.Workbook.AppendChild(new Sheets());
var index = 1;
foreach (var entityType in entityTypes)
{
var sheet = new Sheet
{
Id = excel.WorkbookPart.GetIdOfPart(workSheetPart),SheetId = 1U,Name = entityType
};
sheets.AppendChild(sheet);
}
workBookPart.Workbook.Save(ms);
File.WriteallBytes("D:/nothing123.xlsx",ms.ToArray());
}
}
Excel无法打开文件'nothing123.xlsx',因为文件格式或文件扩展名无效。确认文件未损坏,并且文件扩展名与文件格式匹配。
您知道我的代码怎么了吗?
解决方法
我不知道这是否与标记有关,但是我决定使用ClosedXml
库,因为它比OpenXml
更容易使用。我可以轻松创建一个DataTable
并从DataTable
中创建一个Excel文件,这非常方便。这是我的快速示例代码:
样本数据表
public DataTable getData() {
DataTable dt = new DataTable();
dt.TableName = "SheetName1";
dt.Columns.Add("FirstName");
dt.Columns.Add("LastName");
var row = dt.NewRow();
row["FirstName"] = "Alvin";
row["LastName"] = "Quezon";
dt.Rows.Add(row);
return dt;
}
将代码采样到Excel到字节数组
public static byte[] GetExcelBytes(DataTable dataTable)
{
using (var ms = new MemoryStream())
using (var workBook = new XLWorkbook())
{
workBook.Worksheets.Add(dataTable);
workBook.SaveAs(ms);
return ms.ToArray();
}
}
打开文件并以极好的代码使用率我没有任何问题。
希望这会帮助将来希望使用此功能的任何人。