Читайте файл 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;
}
}