У меня есть WebApi, который получит файл excel, загруженный пользователем как multipart/form-data. Мне нужно прочитать содержимое этого файла, чтобы обновить базу данных. Я думал об использовании EPPlus, но я не могу получить доступ к файлу. Вот кодC# Web Api - Загрузка и чтение данных из файла excel без сохранения файла
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");
}
ли загруженный файл первенствует 2007/2010? – Kami
вы можете объяснить формат файла, это '.XLS, .CSV и т. Д.' Вы считали 'Microsoft.Interop.Excel' Lib – MethodMan
Это 97/2003 excel (.XLS) – NunoRibeiro