2016-11-11 51 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

我希望它能幫助,

胡安