2016-11-11 17 views
10

Xin chào tôi đang cố gắng tải lên và đọc tệp excel trên dự án asp.net của tôi nhưng tất cả tài liệu tôi tìm thấy là dành cho ASP MVC 5. Mục tiêu của tôi là đọc excel sheet và chuyển các giá trị vào một danh sách các đối tượng.Đọc một tệp excel trên lõi asp.net 1.0

Đây là bộ điều khiển của tôi, nó hoạt động để tải lên các tập tin để wwwroot của tôi/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(); 
    } 

Trả lời

-1

Trong hầu hết các trường hợp, nó không quan trọng nếu bạn đang sử dụng ASP.NET 4 hoặc ASP.NET Lõi khi nói để đọc các tệp Excel. Bạn chỉ cần tìm một thư viện cho phép làm điều đó. Bạn nên sử dụng NuGet để thêm các thư viện đó vào dự án của bạn.

Xem hướng dẫn làm thế nào để cài đặt một gói NuGet đây: https://docs.nuget.org/ndocs/guides/install-nuget

Một thư viện mà tôi có thể khuyên bạn nên sử dụng là EPPlus (https://www.nuget.org/packages/EPPlus).

Khi bạn hoàn tất việc tải lên tệp và lưu trữ tệp Excel ở đâu đó, bạn chỉ cần mở tệp đó bằng EPPlus để đọc. Ví dụ đơn giản sau:

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 không được hỗ trợ trên NET lõi nhưng có một cổng không chính thức của thư viện EPPlus tên EPPlus.core có thể được sử dụng để đọc và viết excel. Hãy xem [link] này (http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/) – VirendraJ

+3

Tôi sẽ nói nó đặc biệt quan trọng nếu bạn đang cố gắng đọc các tệp xls hoặc mật khẩu được bảo vệ Excel. Hầu hết các gói sử dụng cấu trúc dữ liệu bị mất giá trị như datatables hoặc các nhà cung cấp kết nối ole không được triển khai trong Core. Ngoài ra các tệp được bảo vệ bằng mật khẩu cần thư viện Office com cho các hoạt động đọc/ghi. – schwietertj

3

Trong .NET Core OleDb và DataTables đã biến mất. Điều này làm cho nó khó khăn hơn cho một số dự án để tự chuyển mình đến netcore.

Nếu bạn đang đọc tệp OpenXml Excel (xlsx), Epplus.Core không chính thức có thể giúp bạn.

Nhưng đối với các định dạng cũ hơn 97-2003 (xls), chúng tôi chưa thể tìm thấy giải pháp.

Tôi hy vọng NPOI hoặc ExcelDataReader sẽ nhận được phiên bản lõi vào cuối năm nay, nhưng tôi không thấy nhiều hoạt động theo hướng đó.

2

Mở package manager console trong Visual Studio và gõ:

PM> Install-Package EPPlus.Core 

Viết file là sau đó đơn giản như:

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(); 
    } 
} 

Thêm ví dụ ở đây: http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/

0

Như đã nêu trong một số ý kiến ​​và câu trả lời, có một cổng EPPlus không chính thức để. Net Core (Tôi đã cheked ngay bây giờ và nó hỗ trợ Core 1.0, 1.1 và 2.0) ...

Mã này chứng tỏ làm thế nào để làm điều đó

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); 
} 

Lưu ý: hôm nay tôi sử dụng tại nơi làm việc và tôi đã tạo ra một số cột mathing điển với tên cột để truy cập trực tiếp đến từng cột, được đặt tên, từng hàng và hiệu suất tốt hơn so với sử dụng một số thư viện khác nhằm đọc các tệp csv.

Một vài liên kết:
- EPPlus.Lõi: https://github.com/VahidN/EPPlus.Core
- Một HowTo với ví dụ này cụ thể: https://www.codeproject.com/Articles/1217036/Console-Logging-and-Reading-Excel-Files-with-NET-C

Tôi hy vọng nó sẽ giúp,

Juan

Các vấn đề liên quan