2017-01-19 54 views
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一样,错误消息为'无效文件签名'。 任何帮助将不胜感激。

回答

0

ClosedXML生成.xlsx文件,而不是.xls文件。

检查你的代码:

Response.AddHeader("content-disposition", "attachment;filename= "+fileName + ".xls"); 
+0

感谢您的答复。 ClosedXML能够通过我的代码生成.xls文件。生成.xls没有问题。生成的文件也被MS-Excel打开,唯一的问题是它不能通过我的源代码读取,正如我上面给出的。 –

+1

@NadeemShaikh我是ClosedXML上的开发人员之一。我保证它不会生成有效的.xls文件。 –

+1

@NadeemShaikh请参阅https://github.com/ClosedXML/ClosedXML/wiki/Does-it-support-Excel-2003-and-prior-formats-(.xls)%3F –