2016-11-11 45 views
10

Witaj Próbuję przesłać i przeczytać plik Excela na moim asp.net projektu, ale cała dokumentacja, którą znajduję jest dla ASP MVC 5. Moim celem jest przeczytanie Excel arkusza i przekaż wartości do listy obiektów.Przeczytaj plik Excela na rdzeniu asp.net 1.0

To jest mój kontroler, to działa do przesłania pliku do moich Wwwroot/przesyłanych

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

Odpowiedz

-1

W większości przypadków nie ma znaczenia, czy używasz ASP.NET lub ASP.NET 4 Rdzeń jeśli chodzi do czytania plików Excel. Musisz tylko znaleźć bibliotekę, która pozwala to zrobić. Zaleca się użycie NuGet do dodania takich bibliotek do projektu.

patrz instrukcja jak zainstalować pakiet Nuget tutaj: https://docs.nuget.org/ndocs/guides/install-nuget

jednej biblioteki, które mogę polecić do wykorzystania jest EPPlus (https://www.nuget.org/packages/EPPlus).

Po zakończeniu pobierania pliku i przechowywaniu pliku Excel gdzieś, wystarczy otworzyć go przy użyciu EPPlus do czytania. Prosty przykład:

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 nie jest obsługiwana w .NET Rdzenia ale jest nieoficjalny port biblioteki EPPlus nazwie EPPlus.core, który może być używany do czytania i pisania programów Excel. Zobacz to [link] (http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/) – VirendraJ

+3

Powiedziałbym, że ma to znaczenie zwłaszcza, jeśli próbujesz odczytać xls lub pliki Excel chronione hasłem. Większość pakietów używa amortyzacji struktur danych, takich jak datatables lub dostawców połączeń ole, które nie są zaimplementowane w Core. Pliki chronione hasłem wymagają również bibliotek biurowych Office do operacji odczytu/zapisu. – schwietertj

3

W .NET Core OleDb i DataTables zniknęły. Utrudnia to niektórym projektom przeniesienie się do netcore.

Jeśli czytasz pliki OpenXml Excel (xlsx), może pomóc ci nieoficjalny plik Epplus.Core.

Jednak w przypadku starszych formatów 97-2003 (xls) nie można było znaleźć rozwiązania.

Mam nadzieję, że NPOI lub ExcelDataReader dostaną wersję podstawową jeszcze w tym roku, ale nie widzę dużej aktywności w tym kierunku.

2

Otwórz package manager console w Visual Studio i typ:

PM> Install-Package EPPlus.Core 

Zapisywanie plików jest wtedy tak proste, jak:

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

Więcej przykładów tutaj: http://www.talkingdotnet.com/import-export-xlsx-asp-net-core/

0

Jak stwierdzono w niektórych komentarzach i odpowiedzi, jest nieoficjalny port EPPlus do .Net Core (już się wygłupiłem i obsługuje Core 1.0, 1.1 i 2.0) ...

Kod ten pokazuje, jak to zrobić

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

Uwaga: dzisiaj stosowane w pracy i stworzyłem słownika numery kolumn mathing z nazwami kolumn, aby przejść bezpośrednio do każdej kolumnie dana nazwa, wiersz po wierszu i wydajność była lepsza niż w przypadku innych bibliotek mających na celu odczytanie plików CSV.

Kilka linków:
- EPPlus.Rdzeń: https://github.com/VahidN/EPPlus.Core
- HOWTO z tym konkretnym przykładzie: https://www.codeproject.com/Articles/1217036/Console-Logging-and-Reading-Excel-Files-with-NET-C

Mam nadzieję, że to pomaga,

Juan