web-dev-qa-db-ja.com

asp.net core 1.0のExcelファイルを読む

こんにちは、私は自分のasp.netプロジェクトにExcelファイルをアップロードして読んでいますが、見つけるドキュメントはすべてASP MVC 5です。私の目標はExcelシートを読み、オブジェクトのリストへの値。

これは私のコントローラーです。ファイルをwwwroot/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();
    }
14
Joel

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/

4
Tomáš Zato

.NET Coreでは、OleDbとDataTablesはなくなりました。これにより、一部のプロジェクトが自分自身をネットコアに移植することが難しくなります。

OpenXml Excelファイル(xlsx)を読んでいる場合は、非公式のEpplus.Coreが役立ちます。

しかし、古い97-2003形式(xls)については、まだ解決策が見つかりませんでした。

NPOIまたはExcelDataReaderのいずれかが今年後半にコアバージョンを取得することを願っていますが、その方向での活動はあまり見られません。

3
reiko

いくつかのコメントと回答で述べられているように、.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);
}

注:今日、私は職場で使用し、各列に直接アクセスするための列名で辞書番号列番号を作成しました。名前、行ごとに与えられ、パフォーマンスはcsvファイルを読み取ることを目的とした他のライブラリを使用するよりも優れていました.

いくつかのリンク:
-EPPlus.Core: https://github.com/VahidN/EPPlus.Core
-この具体例を使用したHowTo: https://www.codeproject.com/Articles/1217036/Console-Logging-and-Reading-Excel-Files-with-NET-C =

私はそれが役立つことを願っています、

ファン

3
Juan

次のパッケージを追加します。

Install-Package Syncfusion.XlsIO.Net.Core -Version 17.2.0.49

Excelファイルの読み取り方法:

 private DataTable ConvertExcelToDataTable(string path)
    {
            using (Stream inputStream = File.OpenRead(path))
            {
                using (ExcelEngine excelEngine = new ExcelEngine())
                {
                    IApplication application = excelEngine.Excel;
                    IWorkbook workbook = application.Workbooks.Open(inputStream);
                    IWorksheet worksheet = workbook.Worksheets[0];

                    DataTable dataTable = worksheet.ExportDataTable(worksheet.UsedRange, ExcelExportDataTableOptions.ColumnNames);
                    return dataTable;
                }
            }
    }