ASP.NET Core导入导出Excel文件

ASP.NET Core导入导出Excel文件


希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好的工具包推荐,请给我留言,谢谢!

本文利用Asp.net core Razor页面实现Excel文件的导入导出,参考大神的文章:ASP.NET Core 导入导出Excel xlsx 文件 - LineZero - 博客园 (cnblogs.com)

下面为详细步骤。

1,创建Razor项目

 

2,在Nuget包管理器中搜索EPPlus, 安装依赖包。EPPlus.Core已经弃用,EPPlus是支持Net Core的最新版本。

 

 3,修改pages/Index.cshtml文件,创建基本导入导出页面。

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">ASP.NET Core导入导出Excel文件</h1>
</div>

<h2></h2>
<hr />
<div>
    <h4>导入Excel</h4>
    <hr />
    <form enctype="multipart/form-data" method="post" asp-page-handler="Import">
        <input type="file" name="excelFile"/>
        <input type="submit" value="导入"/>
    </form>
    <hr />

</div>
<hr />
<div>
    <h4>导出Excel</h4>
    <form enctype="multipart/form-data" method="post"asp-page-handler="Export">
        <input type="submit" value="导出"/>
    </form>
</div>
<hr />

 

 4,修改Index.cshtml.cs文件中的代码,增加OnPostImport 和OnPostExport方法,分别用于导入、导出文件。

首先在构造函数中注入webHostEnvironment

        private readonly IWebHostEnvironment _webHostEnvironment;

        public IndexModel(IWebHostEnvironment webHostEnvironment)
        {
            _webHostEnvironment = webHostEnvironment;
        }

OnPostImport代码:

public IActionResult OnPostImport(IFormFile excelFile)
        {
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            string sWebRootFolder = _webHostEnvironment.WebRootPath;
            string sFileName = $"{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            try
            {
                using (FileStream fs = new FileStream(file.ToString(), FileMode.Create))
                {
                    excelFile.CopyTo(fs);
                    fs.Flush();
                }
                using(ExcelPackage package = new ExcelPackage(file))
                {
                    StringBuilder sb = new StringBuilder();
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
                    int rowCount = worksheet.Dimension.Rows;
                    int colCount = worksheet.Dimension.Columns;
                    bool bheaderRow = true;
                    for(int row = 1; row <= rowCount; row++)
                    {
                        for(int col = 1; col <= colCount; col++)
                        {
                            if (bheaderRow)
                            {
                                if(worksheet.Cells[row, col].Value != null)
                                {
                                    sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                                }
                                else
                                {
                                    sb.Append("\t");
                                }
                            }
                            else
                            {
                                if(worksheet.Cells[row, col].Value != null)
                                {
                                    sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                                }
                                else
                                {
                                    sb.Append("\t");
                                }
                            }
                        }
                        sb.Append(Environment.NewLine);
                        if (bheaderRow)
                        {
                            sb.Append("-----------------------------------------");
                            sb.Append(Environment.NewLine);
                        }
                        bheaderRow = false;
                    }
                    return Content(sb.ToString());
                }
            }
            catch(Exception ex)
            {
                return Content(ex.Message);
            }
        }

其中必须添加

ExcelPackage.LicenseContext = LicenseContext.NonCommercial 用于指定EPPlus的使用授权为非商用。缺少会报错。

OnPostExport代码:
public IActionResult OnPostExport()
        {
            string sWebRootFolder = _webHostEnvironment.WebRootPath;
            string sFileName = $"{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            using (ExcelPackage package=new ExcelPackage(file))
            {
                //add worksheet
                ExcelWorksheet workSheet = package.Workbook.Worksheets.Add("AspNetCore");
                //add table header
                workSheet.Cells[1, 1].Value = "ID";
                workSheet.Cells[1, 2].Value = "Name";
                workSheet.Cells[1, 3].Value = "Gender";
                workSheet.Cells[1, 4].Value = "Age";
                workSheet.Cells[1, 5].Value = "Remark";

                //Add value
                workSheet.Cells["A2"].Value = 1000;
                workSheet.Cells["B2"].Value = "张三";
                workSheet.Cells["C2"].Value = "";
                workSheet.Cells["D2"].Value = 25;
                workSheet.Cells["E2"].Value = "ABCD";

                workSheet.Cells["A3"].Value = 1001;
                workSheet.Cells["B3"].Value = "李四";
                workSheet.Cells["C3"].Value = "";
                workSheet.Cells["D3"].Value = 35;
                workSheet.Cells["D3"].Style.Font.Bold = true;

                workSheet.Cells["A4"].Value = 1003;
                workSheet.Cells["B4"].Value = "Amy";
                workSheet.Cells["C4"].Value = "Female";
                workSheet.Cells["D4"].Value = 22;
                workSheet.Cells["E4"].Value = "Hello world";

                workSheet.Cells["A5"].Value = 1004;
                workSheet.Cells["B5"].Value = "Jim";
                workSheet.Cells["C5"].Value = "Male";
                workSheet.Cells["D5"].Value = 35;
                workSheet.Cells["E5"].Value = 500;

                package.Save();
            }

            return File(sFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        }

Index.cshtml.cs的完整代码如下:

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebAppTest.Models;

namespace WebAppTest.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;
private readonly IWebHostEnvironment _webHostEnvironment;

        public IndexModel(ILogger<IndexModel> logger,IWebHostEnvironment webHostEnvironment)
        {
            _logger = logger;
            _context = context;
            _webHostEnvironment = webHostEnvironment;
        }

        public void OnGet()
        {

        }

        
        public IActionResult OnPostImport(IFormFile excelFile)
        {
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            string sWebRootFolder = _webHostEnvironment.WebRootPath;
            string sFileName = $"{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            try
            {
                using (FileStream fs = new FileStream(file.ToString(), FileMode.Create))
                {
                    excelFile.CopyTo(fs);
                    fs.Flush();
                }
                using(ExcelPackage package = new ExcelPackage(file))
                {
                    StringBuilder sb = new StringBuilder();
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
                    int rowCount = worksheet.Dimension.Rows;
                    int colCount = worksheet.Dimension.Columns;
                    bool bheaderRow = true;
                    for(int row = 1; row <= rowCount; row++)
                    {
                        for(int col = 1; col <= colCount; col++)
                        {
                            if (bheaderRow)
                            {
                                if(worksheet.Cells[row, col].Value != null)
                                {
                                    sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                                }
                                else
                                {
                                    sb.Append("\t");
                                }
                            }
                            else
                            {
                                if(worksheet.Cells[row, col].Value != null)
                                {
                                    sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                                }
                                else
                                {
                                    sb.Append("\t");
                                }
                            }
                        }
                        sb.Append(Environment.NewLine);
                        if (bheaderRow)
                        {
                            sb.Append("-----------------------------------------");
                            sb.Append(Environment.NewLine);
                        }
                        bheaderRow = false;
                    }
                    return Content(sb.ToString());
                }
            }
            catch(Exception ex)
            {
                return Content(ex.Message);
            }
        }

        public IActionResult OnPostExport()
        {
            string sWebRootFolder = _webHostEnvironment.WebRootPath;
            string sFileName = $"{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            using (ExcelPackage package=new ExcelPackage(file))
            {
                //add worksheet
                ExcelWorksheet workSheet = package.Workbook.Worksheets.Add("AspNetCore");
                //add table header
                workSheet.Cells[1, 1].Value = "ID";
                workSheet.Cells[1, 2].Value = "Name";
                workSheet.Cells[1, 3].Value = "Gender";
                workSheet.Cells[1, 4].Value = "Age";
                workSheet.Cells[1, 5].Value = "Remark";

                //Add value
                workSheet.Cells["A2"].Value = 1000;
                workSheet.Cells["B2"].Value = "张三";
                workSheet.Cells["C2"].Value = "";
                workSheet.Cells["D2"].Value = 25;
                workSheet.Cells["E2"].Value = "ABCD";

                workSheet.Cells["A3"].Value = 1001;
                workSheet.Cells["B3"].Value = "李四";
                workSheet.Cells["C3"].Value = "";
                workSheet.Cells["D3"].Value = 35;
                workSheet.Cells["D3"].Style.Font.Bold = true;

                workSheet.Cells["A4"].Value = 1003;
                workSheet.Cells["B4"].Value = "Amy";
                workSheet.Cells["C4"].Value = "Female";
                workSheet.Cells["D4"].Value = 22;
                workSheet.Cells["E4"].Value = "Hello world";

                workSheet.Cells["A5"].Value = 1004;
                workSheet.Cells["B5"].Value = "Jim";
                workSheet.Cells["C5"].Value = "Male";
                workSheet.Cells["D5"].Value = 35;
                workSheet.Cells["E5"].Value = 500;

                package.Save();
            }

            return File(sFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        }
    }
}

5,运行项目,测试导入导出功能。

导出功能,单击导出按钮,浏览器会下载excel文件,

 

 

 

 导入功能,点击选择文件按钮,选择刚下载的excel文件,点击导入按钮,跳转到导入结果页面。

 

 

 


 

------------------------ 完成---------------------

 

 

 

 

posted @ 2021-08-17 13:33  VTech_kevin  阅读(2678)  评论(0编辑  收藏  举报