C# Web API - 从 excel 文件上传和读取数据而不保存文件

本文关键字:读取 数据 保存文件 API Web 文件 excel | 更新日期: 2023-09-27 18:33:25

我有一个WebApi,它将接收用户上传的Excel文件作为多部分/表单数据。我需要读取该文件的内容才能更新数据库。我正在考虑使用 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

)。

我做错了什么?是溪流吗?

我正在尝试为每种类型的 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");            
    }

C# Web API - 从 excel 文件上传和读取数据而不保存文件

您可以使用

Microsoft.Interop.Excel读取xls文件,但即使是Microsoft也不反对这种技术,因为它很慢,而且不是为在服务器上运行而设计的。此外,他们的支持刚刚结束。

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

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