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");
}
您可以使用
Microsoft.Interop.Excel读取xls文件,但即使是Microsoft也不反对这种技术,因为它很慢,而且不是为在服务器上运行而设计的。此外,他们的支持刚刚结束。
作为替代方案,您可以使用EasyXLS库。您可以使用它来读取 XLS 文件。
查看此代码示例,该示例说明了如何将 Excel 文件导入 SQL 表:http://www.easyxls.com/manual/FAQ/import-excel-to-sql.html