у меня есть модель public class CostItem { public int Id { get; set; } public string NodeCode { get; set; } public string CostName { get; set; } public string CommentISR { get; set; } public string ContractorComment { get; set; } public string UnitOfMeasure { get; set; } public decimal ConsumptionCoefficient { get; set; } public int BaseObjectCount { get; set; } public int TotalCount { get; set; } public decimal PriceWithVAT { get; set; } public decimal PriceWithoutVAT { get; set; } public int ProjectCode { get; set; } // Код проекта } Мне нужно загрузить в неё данные из файла xlsx в проекте Asp.net core mvc. Напиши код код контроллера и представления для загрузки данных с использованием бесплатных утилит.
Для загрузки данных из файла Excel (формат .xlsx) в модель CostItem
в проекте ASP.NET Core MVC, вы можете использовать библиотеку EPPlus
, которая позволяет работать с Excel файлами. Ниже приведен пример кода контроллера и представления для загрузки данных.
Сначала установите пакет EPPlus
через NuGet. Вы можете сделать это с помощью команды в консоли диспетчера пакетов:
Install-Package EPPlus
Или добавив его в ваш файл .csproj
:
<PackageReference Include="EPPlus" Version="5.8.3" />
Создайте контроллер, который будет обрабатывать загрузку файла и извлечение данных из него.
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml;
namespace YourNamespace.Controllers
{
public class CostItemController : Controller
{
[HttpGet]
public IActionResult Upload()
{
return View();
}
[HttpPost]
public IActionResult Upload(IFormFile file)
{
if (file == null || file.Length == 0)
{
ModelState.AddModelError("", "Please upload a file.");
return View();
}
var costItems = new List<CostItem>();
using (var stream = new MemoryStream())
{
file.CopyTo(stream);
using (var package = new ExcelPackage(stream))
{
var worksheet = package.Workbook.Worksheets.First();
var rowCount = worksheet.Dimension.Rows;
for (int row = 2; row <= rowCount; row++) // Начинаем со второй строки, чтобы пропустить заголовки
{
var costItem = new CostItem
{
Id = int.Parse(worksheet.Cells[row, 1].Text),
NodeCode = worksheet.Cells[row, 2].Text,
CostName = worksheet.Cells[row, 3].Text,
CommentISR = worksheet.Cells[row, 4].Text,
ContractorComment = worksheet.Cells[row, 5].Text,
UnitOfMeasure = worksheet.Cells[row, 6].Text,
ConsumptionCoefficient = decimal.Parse(worksheet.Cells[row, 7].Text),
BaseObjectCount = int.Parse(worksheet.Cells[row, 8].Text),
TotalCount = int.Parse(worksheet.Cells[row, 9].Text),
PriceWithVAT = decimal.Parse(worksheet.Cells[row, 10].Text),
PriceWithoutVAT = decimal.Parse(worksheet.Cells[row, 11].Text),
ProjectCode = int.Parse(worksheet.Cells[row, 12].Text)
};
costItems.Add(costItem);
}
}
}
// Здесь вы можете сохранить costItems в базе данных или выполнить другие действия
return RedirectToAction("Index"); // Перенаправление на другую страницу после загрузки
}
}
}
Создайте представление Upload.cshtml
для загрузки файла.
@{
ViewData["Title"] = "Upload Cost Items";
}
<h2>Upload Cost Items</h2>
<form asp-action="Upload" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="file">Select Excel file:</label>
<input type="file" name="file" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
@if (!ViewData.ModelState.IsValid)
{
<div class="alert alert-danger">
@foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
{
<p>@error.ErrorMessage</p>
}
</div>
}
Убедитесь, что у вас настроены маршруты для контроллера в Startup.cs
или Program.cs
, в зависимости от версии ASP.NET Core, которую вы используете.
Теперь у вас есть контроллер и представление для загрузки данных из файла Excel в модель CostItem
. Не забудьте добавить обработку ошибок и валидацию данных в зависимости от ваших