Читайте файл excel на asp.net core 1.0

Здравствуйте, я пытаюсь загрузить и прочитать файл excel в моем проекте asp.net, но вся документация, которую я нахожу, предназначена для ASP MVC 5. Моя цель - прочитать лист excel и передать значения в список объектов.

Это мой контроллер, он работает для загрузки файла на мой wwwroot/uploads

public class HomeController : Controller
{
    private IHostingEnvironment _environment;

    public HomeController(IHostingEnvironment environment)
    {
        _environment = environment;
    }

    public IActionResult index()
    {
        return View();
    }



    [HttpPost]
    public async Task<IActionResult> Index(ICollection<IFormFile> files)
    {
        var uploads = Path.Combine(_environment.WebRootPath, "uploads");
        foreach (var file in files)
        {
            if (file.Length > 0)
            {
                using (var fileStream = new FileStream(Path.Combine(uploads,    file.FileName), FileMode.Create))
                {
                    await file.CopyToAsync(fileStream);
                }
            }
        }
        return View();
    }

Ответ 1

Откройте консоль диспетчера пакетов в Visual Studio и введите:

PM> Install-Package EPPlus.Core

Написание файлов так же просто, как:

public void WriteExcel(string fileName)
{


    FileInfo file = new FileInfo(fileName);
    /// overwrite old file
    if (file.Exists)
    {
        file.Delete();
        file = new FileInfo(fileName);
    }
    using (ExcelPackage package = new ExcelPackage(file))
    {
        // add a new worksheet to the empty workbook
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Employee");
        worksheet.Cells["A1"].Value = "HELLO WORLD!!!";
        package.Save(); 
    }
}

Другие примеры здесь: http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/

Ответ 2

В .NET Core OleDb и DataTables ушли. Это затрудняет выполнение некоторыми проектами сетей netcore.

Если вы читаете файлы OpenXml Excel (xlsx), неофициальный Epplus.Core может вам помочь.

Но для более старых форматов формата 97-2003 (xls) мы еще не смогли найти решение.

Я бы надеялся, что в этом году NPOI или ExcelDataReader получат базовую версию, но я не вижу большой активности в этом направлении.

Ответ 3

Как указано в некоторых комментариях и ответах, есть ненадлежащий порт EPPlus для .Net Core (я сейчас щекочусь и поддерживаю Core 1.0, 1.1 и 2.0)...

Этот код демонстрирует, как это сделать

var filePath = @"D:/test.xlsx";
FileInfo file = new FileInfo(filePath);

using (ExcelPackage package = new ExcelPackage(file))
{       
    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
    int rowCount = worksheet.Dimension.Rows;
    int ColCount = worksheet.Dimension.Columns;

    var rawText = string.Empty;
    for (int row = 1; row <= rowCount; row++)
    {
        for (int col = 1; col <= ColCount; col++)
        {   
            // This is just for demo purposes
            rawText += worksheet.Cells[row, col].Value.ToString() + "\t";    
        }
        rawText+="\r\n";
    }
    _logger.LogInformation(rawText);
}

Примечание: сегодня я использовал его на работе, и я создал номера столбцов математического словаря с именами столбцов, чтобы получить доступ непосредственно к каждому столбцу, учитывая имя, строку за строкой, и производительность была лучше, чем использование некоторых других библиотек, предназначенных для чтения файлов csv.

Несколько ссылок:
 - EPPlus.Core: https://github.com/VahidN/EPPlus.Core
 - С этим конкретным примером:  https://www.codeproject.com/Articles/1217036/Console-Logging-and-Reading-Excel-Files-with-NET-C

Надеюсь, это поможет,

Хуан

Ответ 4

Добавьте следующий пакет:

Install-Package Syncfusion.XlsIO.Net.Core -Version 17.2.0.49

Метод чтения файла Excel:

 private DataTable ConvertExcelToDataTable(string path)
    {
            using (Stream inputStream = File.OpenRead(path))
            {
                using (ExcelEngine excelEngine = new ExcelEngine())
                {
                    IApplication application = excelEngine.Excel;
                    IWorkbook workbook = application.Workbooks.Open(inputStream);
                    IWorksheet worksheet = workbook.Worksheets[0];

                    DataTable dataTable = worksheet.ExportDataTable(worksheet.UsedRange, ExcelExportDataTableOptions.ColumnNames);
                    return dataTable;
                }
            }
    }

Ответ 5

В большинстве случаев не имеет значения, используете ли вы ASP.NET 4 или ASP.NET Core, когда дело доходит до чтения файлов Excel. Вам просто нужно найти библиотеку, которая позволяет это сделать. Для добавления таких библиотек в проект рекомендуется использовать NuGet.

Смотрите инструкции по установке пакета NuGet здесь: https://docs.nuget.org/ndocs/guides/install-nuget

Одной библиотекой, которую я могу рекомендовать, является EPPlus (https://www.nuget.org/packages/EPPlus).

Когда вы закончите загрузку файлов и где-то сохранили файл Excel, вам просто нужно открыть его, используя EPPlus для чтения. Простой пример:

var package = new ExcelPackage(new FileInfo("sample.xlsx"));

ExcelWorksheet workSheet = package.Workbook.Worksheets[0];

for (int i = workSheet.Dimension.Start.Column; i <= workSheet.Dimension.End.Column; i++)
{
    for (int j = workSheet.Dimension.Start.Row; j <= workSheet.Dimension.End.Row; j++)
    {
        object cellValue = workSheet.Cells[i, j].Value;
    }
}