[英]C# Problem opening excel file using `OpenXml` from `byte[]`
使用OpenXml
库保存和打开文件时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
,并创建一个Excel文件进行DataTable
,这是非常方便的。 这是我的快速示例代码:
示例数据表
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();
}
}
打开文件和极少的代码使用时,我没有遇到任何问题。
希望这将有助于任何想在未来使用它的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.