专栏首页Vincent-yuanasp.net core web的导入导出excel功能

asp.net core web的导入导出excel功能

这里主要记录下asp.net core web页面上进行导入导出excel的操作。

主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能。

这里使用到EPPlus.Core,其实对于excel的导入导出还可以使用NPOI,

这里讲解EPPlus的方式

1.创建asp.net core web (mvc)项目

效果图如下

2.在项目上右键,进入nuget管理器,安装EPPlus.Core

3.添加一个XlsxController控制器,在其中添加导入和导出功能

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml;

namespace EPPlusDemo.Controllers
{
    public class XlsxController : Controller
    {
        //用来获取路径相关
        private IHostingEnvironment _hostingEnvironment;

        public XlsxController(IHostingEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }
        public IActionResult Index()
        {
            return View();
        }

        /// <summary>
        /// excel导出功能
        /// </summary>
        /// <returns></returns>
        public IActionResult Export()
        {
            string sWebRootFolder = _hostingEnvironment.WebRootPath;
            string sFileName = $"{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));  //Path.Combine把多个字符串组成一个路径
            using (ExcelPackage package = new ExcelPackage(file))   //ExcelPackage 操作excel的主要对象
            {
                // 添加worksheet
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("aspnetcore");
                //添加头
                worksheet.Cells[1, 1].Value = "ID";
                worksheet.Cells[1, 2].Value = "Name";
                worksheet.Cells[1, 3].Value = "Url";
                //添加值
                worksheet.Cells["A2"].Value = 1000;
                worksheet.Cells["B2"].Value = "baidu";
                worksheet.Cells["C2"].Value = "https://www.baidu.com/";

                worksheet.Cells["A3"].Value = 1001;
                worksheet.Cells["B3"].Value = "博客园";
                worksheet.Cells["C3"].Value = "https://www.cnblogs.com/";
                worksheet.Cells["C3"].Style.Font.Bold = true;

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

     //导入功能
        [HttpPost]
        public IActionResult Import(IFormFile excelfile)
        {
            string sWebRootFolder = _hostingEnvironment.WebRootPath;
            string sFileName = $"{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            try
            {
                //把excelfile中的数据复制到file中
                using (FileStream fs = new FileStream(file.ToString(), FileMode.Create)) //初始化一个指定路径和创建模式的FileStream
                {
                    excelfile.CopyTo(fs);
                    fs.Flush();  //清空stream的缓存,并且把缓存中的数据输出到file
                }

                using (ExcelPackage package = new ExcelPackage(file))
                {
                    StringBuilder sb = new StringBuilder();
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                    int rowCount = worksheet.Dimension.Rows;
                    int ColCount = worksheet.Dimension.Columns;
                    
                    for (int row = 1; row <= rowCount; row++)
                    {
                        for (int col = 1; col <= ColCount; col++)
                        {
                            //sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t"); //这种写法遇到为null的为报错
                            sb.Append(worksheet.Cells[row, col].Value + "\t");
                        }
                        sb.Append(Environment.NewLine);
                    }
                    return Content(sb.ToString());
                }
            }
            catch (Exception ex)
            {
                return Content(ex.Message);
            }
        }


    }

4.在 Xlsx / Index.cshtml 文件上进行如下编辑

@{
    ViewData["Title"] = "Index";
}


<h2>ASP.NET Core 导入导出Excel xlsx 文件</h2>

<a asp-action="Export">导出Excel</a>
<hr />

<!--导入-->
<form enctype="multipart/form-data" method="post" asp-action="Import">
    <input type="file" name="excelfile" />
    <input type="submit" value="上传" />
</form>

5.运行程序,效果如下

最后,附上参考网址:  

https://www.cnblogs.com/linezero/p/aspnetcoreexcel.html

后续继续学习网址:

https://github.com/JanKallman/EPPlus/wiki

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式~装饰模式

    3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。

    Vincent-yuan
  • MyEclipse的 lib和Build path(构建路径)

    Build path(构建路径):对于种方式来说,可以算是对jar包文件的一个引用。可以引用lib下的jar包,也可以引用本地磁盘上的jar包。

    Vincent-yuan
  • 前端学习(25)~js学习(三):变量的数据类型

    在计算机中,不同的数据所需占用的存储空间不同,为了充分利用存储空间,于是定义了不同的数据类型。而且,不同的数据类型,寓意也不同。

    Vincent-yuan
  • Spring常用配置

    上篇文章我们简单介绍了Spring的基本配置,算是一个简单的入门,这篇文章我们再一起来看看Spring在使用的过程中一些其他的常见配置。 Bean的Scope ...

    江南一点雨
  • 那些年,我们见过的Java服务端“问题”

    明代著名的心学集大成者王阳明先生在《传习录》中有云:“道无精粗,人之所见有精粗。如这一间房,人初进来,只见一个大规模如此。处久,便柱壁之类,一一看得明白。再久,...

    macrozheng
  • jacoco core.runtime包源码分析

    被 instrument 的类需要一段代码,该代码从运行时获取 boolean[]实例。 该机制是针对于运行时的,因此由该接口抽象。 实现由 IRuntime...

    JavaEdge
  • 前端高级进阶:如何更好地优化打包资源

    这是山月关于高级前端进阶暨前端工程系列文章的第 M 篇文章 (M 随便打的,毕竟也不知道能写多少篇),关于前 M-1 篇文章,可以从我的 github repo...

    winty
  • Java-内部类

    如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象(在静态方法内部创建某个内部类的对象),那么必须像在main()方法中那样,具体地指明这个对象的类型...

    桑鱼
  • appium学习笔记(环境安装配置,设备启动)

       启动中如果遇到 main.js: error: argument "--app": Expected one argument. null 错误,注意Ap...

    未来sky
  • 避免在ASP.NET Core中使用服务定位器模式

    题记:服务定位器(Service Locator)作为一种反模式,一般情况下应该避免使用,在ASP.NET Core更是需要如此。 Scott Allen在其博...

    逸鹏

扫码关注云+社区

领取腾讯云代金券