2016-11-11 48 views
10

你好我真的试图上传和我的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(); 
    } 

回答

-1

在大多数情况下,它并不重要,如果你是当它涉及使用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; 
    } 
} 
+12

EPPlus不支持.NET的核心,但有一个名为EPPlus库的非官方端口EPPlus.core可以用来读写excel。看到这个[链接](http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/) – VirendraJ

+3

我会说这很重要,特别是如果你正在尝试读取xls或密码保护的Excel文件。大多数软件包使用折旧的数据结构,例如未在Core中实现的datatables或ole连接提供程序。密码保护的文件也需要用于读/写操作的Office com库。 – schwietertj

3

在.NET核心的OleDb和数据表都没有了。这使得一些项目难以将自己移植到netcore。

如果您正在阅读的OpenXML Excel文件(XLSX),非官方Epplus.Core可以帮助你。

但是对于上了年纪97-2003格式(XLS),我们无法找到一个解决办法呢。

我希望无论是NPOI或ExcelDataReader今年晚些时候会得到一个核心版本,但我没有看到那个方向多活动。

2

打开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/

0

正如一些评论指出,并答案是,.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

我希望它能帮助,

胡安