0
我有下面的代码在Excel工作表中的数据保存为.xls的无法读取使用closedxml
public ActionResult ExportToExcel()
{
DataTable tbl = CopyGenericToDataTable(res);
tbl.TableName = "InvalidInvoices";
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(tbl);
wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
wb.Style.Font.Bold = true;
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename= "+fileName + ".xls");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
}
以上是下载XLS擅长客户端表代码练成保存为XLS片。它可以很好地将数据保存在Excel表格中。 问题是,如果我尝试使用下面的代码上传此相同的文件 -
if (files != null)
{
HttpPostedFileBase upload = files.FirstOrDefault();
Stream stream = upload.InputStream;
DataSet result = new DataSet();
if (upload != null && upload.ContentLength > 0)
{
if (upload.FileName.EndsWith(".xls") || upload.FileName.EndsWith(".xlsx"))
{
// ExcelDataReader works with the binary Excel file, so it needs a FileStream
// to get started. This is how we avoid dependencies on ACE or Interop:
// We return the interface, so that
IExcelDataReader reader = null;
if (upload.FileName.EndsWith(".xls"))
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (upload.FileName.EndsWith(".xlsx"))
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
reader.IsFirstRowAsColumnNames = false;
result = reader.AsDataSet();
reader.Close();
}
}
}
在上面的代码中,我在ExcelReaderFactory.CreateBinaryReader收到错误(流); 在流中,它具有以字节为单位的值,就像使用excelreaderfactory阅读器的createBinaryreader一样,错误消息为'无效文件签名'。 任何帮助将不胜感激。
感谢您的答复。 ClosedXML能够通过我的代码生成.xls文件。生成.xls没有问题。生成的文件也被MS-Excel打开,唯一的问题是它不能通过我的源代码读取,正如我上面给出的。 –
@NadeemShaikh我是ClosedXML上的开发人员之一。我保证它不会生成有效的.xls文件。 –
@NadeemShaikh请参阅https://github.com/ClosedXML/ClosedXML/wiki/Does-it-support-Excel-2003-and-prior-formats-(.xls)%3F –