C#Web Api – 上传和读取excel文件中的数据而不保存文件

我有一个WebApi,这将接收用户上传的excel文件作为multipart / form-data。 我需要读取该文件的内容才能更新数据库。 我正在考虑使用EPPlus,但我无法访问该文件。 这是代码

public class MyController : APIController { [Route("import")] [HttpPost] public async Task<HttpResponseMessage> importFile() { if (!Request.Content.IsMimeMultipartContent()) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "ERROR"); Stream stream = await Request.Content.ReadAsStreamAsync(); var excel = new ExcelPackage(stream); var workbook = excel.Workbook; var sheet = excel.Workbook.Worksheets.First(); ... } 

错误是在var sheet = excel.Workbook.Worksheets.First()因为工作簿没有任何工作表(但物理文件有2)。

我究竟做错了什么? 它是stream吗?

我试图为每种types的Excel文件(.xls或.xlsx)分开的库,但我不能使这个工作与.xls文件。 我正在使用ExcelDataReader,代码现在是这样的:

 public async Task<HttpResponseMessage> importFile() { if (!Request.Content.IsMimeMultipartContent()) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "NOT MULTIPART"); Stream stream = await Request.Content.ReadAsStreamAsync(); //open xlsx file var excel = new ExcelPackage(stream); var workbook = excel.Workbook; try { var sheet = excel.Workbook.Worksheets.First(); //working fine with EPPlus for .xlsx files return Request.CreateResponse(HttpStatusCode.OK, errors); }catch(Exception)//open xls file { //if its a .xls file it will throw an Exception } //using ExcelDataReader to open .xls file IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); DataSet result = excelReader.AsDataSet(); // the DataSet is null, stream is setted as ReadOnlyStream and stream.length is throwing an ObjectDisposedException return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "erro"); } 

您可以使用Microsoft.Interop.Excel来读取xls文件,但即使是微软也摒弃了这种技术,因为它速度慢,而且不能在服务器上运行。 而且,他们的支持刚刚结束。

作为替代,您可以使用EasyXLS库。 您可以使用它来读取XLS文件。

看看这个代码示例,说明如何将Excel文件导入到SQL表中: http : //www.easyxls.com/manual/FAQ/import-excel-to-sql.html