阅读一个Excel的asp.net核心文件1.0
你好我真的试图上传和我的asp.net项目中读取Excel文件,但所有我找到的文档是ASP MVC 5. 我的目标是读Excel表格并将值传递给对象列表。阅读一个Excel的asp.net核心文件1.0
这是我的控制器,它的工作文件上传到我的wwwroot /上传
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();
}
在大多数情况下,它并不重要,如果你是当它涉及使用ASP.NET 4或ASP.NET核心阅读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;
}
}
在.NET核心的OleDb和数据表都没有了。这使得一些项目难以将自己移植到netcore。
如果您正在阅读的OpenXML Excel文件(XLSX),非官方Epplus.Core可以帮助你。
但是对于上了年纪97-2003格式(XLS),我们无法找到一个解决办法呢。
我希望无论是NPOI或ExcelDataReader今年晚些时候会得到一个核心版本,但我没有看到那个方向多活动。
打开package manager console在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/
正如一些评论指出,并答案是,.Net Core有一个非正式的EPPlus端口(我现在已经试过了,它支持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);
}
注:今天我用在工作中,我创建了列名的字典mathing列号给出的名字,一行一行直接访问到每一列,并性能要好于使用其他一些旨在读取csv文件的库。
几个环节:
- EPPlus。核心:https://github.com/VahidN/EPPlus.Core
- 这个具体的例子一份HOWTO: https://www.codeproject.com/Articles/1217036/Console-Logging-and-Reading-Excel-Files-with-NET-C
我希望它能帮助,
胡安
EPPlus不支持.NET的核心,但有一个名为EPPlus库的非官方端口EPPlus.core可以用来读写excel。看到这个[链接](http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/) – VirendraJ
我会说这很重要,特别是如果你正在尝试读取xls或密码保护的Excel文件。大多数软件包使用折旧的数据结构,例如未在Core中实现的datatables或ole连接提供程序。密码保护的文件也需要用于读/写操作的Office com库。 – schwietertj