1.前言

本篇文章通过ASP.NET Core的EPPlus包去操作Excel(导入导出),其使用原理与NPOI类似,导出Excel的时候不需要电脑上安装office,非常好用

2.使用

新建一个ASP.NET Core Web应用程序(模型视图控制器),还有一个类库,SDK2.1版本,解决方案如下

3.在EPPlusCommon类库中创建一个EPPlusHelper类,包括两个方法,导入和读取数据

 using OfficeOpenXml;
using OfficeOpenXml.Style;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
namespace EPPlusCommon
{
public class EPPlusHelper
{
private static int i; /// <summary>
/// 导入数据到Excel中
/// </summary>
/// <param name="fileName"></param>
/// <param name="ds"></param>
public static bool ImportExcel(string fileName, DataSet ds)
{
if (ds == null || ds.Tables.Count == )
{
return false;
}
FileInfo file = new FileInfo(fileName);
if (file.Exists)
{
file.Delete();
file = new FileInfo(fileName);
}
//在using语句里面我们可以创建多个worksheet,ExcelPackage后面可以传入路径参数
//命名空间是using OfficeOpenXml
using (ExcelPackage package = new ExcelPackage(file))
{
foreach (DataTable dt in ds.Tables)
{
//创建工作表worksheet
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(dt.TableName);
//给单元格赋值有两种方式
//worksheet.Cells[1, 1].Value = "单元格的值";直接指定行列数进行赋值
//worksheet.Cells["A1"].Value = "单元格的值";直接指定单元格进行赋值
worksheet.Cells.Style.Font.Name = "微软雅黑";
worksheet.Cells.Style.Font.Size = ;
worksheet.Cells.Style.ShrinkToFit = true;//单元格自动适应大小
for (int i = ; i < dt.Rows.Count; i++)
{
for (int j = ; j < dt.Columns.Count; j++)
{
worksheet.Cells[i + , j + ].Value = dt.Rows[i][j].ToString();
}
}
using (var cell = worksheet.Cells[, , , dt.Columns.Count])
{
//设置样式:首行居中加粗背景色
cell.Style.Font.Bold = true; //加粗
cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; //水平居中
cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center; //垂直居中
cell.Style.Font.Size = ;
cell.Style.Fill.PatternType = ExcelFillStyle.Solid; //背景颜色
cell.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(, , ));//设置单元格背景色
}
}
//保存
package.Save();
}
return true;
} /// <summary>
/// 读取Excel数据
/// </summary>
/// <param name="fileName"></param>
public static string ReadExcel(string fileName)
{
StringBuilder sb = new StringBuilder();
FileInfo file = new FileInfo(fileName);
try
{
using (ExcelPackage package = new ExcelPackage(file))
{
var count = package.Workbook.Worksheets.Count;
for (int k = ; k <= count; k++) //worksheet是从1开始的
{
var workSheet = package.Workbook.Worksheets[k];
sb.Append(workSheet.Name);
sb.Append(Environment.NewLine);
int row = workSheet.Dimension.Rows;
int col = workSheet.Dimension.Columns;
for (int i = ; i <= row; i++)
{
for (int j = ; j <= col; j++)
{
sb.Append(workSheet.Cells[i, j].Value.ToString() + "\t");
}
sb.Append(Environment.NewLine);
}
sb.Append(Environment.NewLine);
sb.Append(Environment.NewLine);
}
}
}
catch (Exception ex)
{
return "An error had Happen";
}
return sb.ToString();
}
}
}

代码片段已经给出了一些注释,对于Excel的更多样式设置可以参考博客

4.新建一个ExcelController(用于读取和导入Excel),代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EPPlusCommon;
using Microsoft.AspNetCore.Hosting;
using System.IO;
using EPPlusWeb.Models; namespace EPPlusWeb.Controllers
{
public class ExcelController : Controller
{
private readonly IHostingEnvironment _hosting;
public ExcelController(IHostingEnvironment hosting)
{
_hosting = hosting;
}
public IActionResult Import()
{
string folder = _hosting.WebRootPath;
string fileName = Path.Combine(folder, "Excel", "Test.xlsx");
bool result = EPPlusHelper.ImportExcel(fileName, ExcelData.GetExcelData());
string str = result ? "导入Excel成功:" + fileName : "导入失败";
return Content(str);
}
public IActionResult Read()
{
string folder = _hosting.WebRootPath;
string fileName = Path.Combine(folder, "Excel", "Test.xlsx");
string result = EPPlusHelper.ReadExcel(fileName);
return Content(result);
}
}
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks; namespace EPPlusWeb.Models
{
public class ExcelData
{
public static DataSet GetExcelData()
{
DataSet ds = new DataSet();
string[,] infos =
{
{ "","刘备","男","计算机科学与工程学院","计算机科学与技术"},
{ "","关羽","男","计算机科学与工程学院","通信工程"},
{ "","张飞","男","数学与统计学院","信息与计算科学"},
{ "","小乔","女","文学院","汉语言文学"}
};
string[,] scores =
{
{ "","刘备","","",""},
{ "","关羽","","",""},
{ "","张飞","","",""},
{ "","小乔","","",""}
};
DataTable stuInfoTable = new DataTable
{
TableName = "学生信息表"
};
stuInfoTable.Columns.Add("学号", typeof(string));
stuInfoTable.Columns.Add("姓名", typeof(string));
stuInfoTable.Columns.Add("性别", typeof(string));
stuInfoTable.Columns.Add("学院", typeof(string));
stuInfoTable.Columns.Add("专业", typeof(string));
stuInfoTable.Rows.Add("学号", "姓名", "性别", "学院", "专业");
for (int i = ; i < infos.GetLength(); i++)
{
DataRow row = stuInfoTable.NewRow();
for (int j = ; j < infos.GetLength(); j++)
{
row[j] = infos[i, j];
}
stuInfoTable.Rows.Add(row);
}
ds.Tables.Add(stuInfoTable); DataTable stuScoreTable = new DataTable
{
TableName = "学生成绩表"
};
stuScoreTable.Columns.Add("学号", typeof(string));
stuScoreTable.Columns.Add("姓名", typeof(string));
stuScoreTable.Columns.Add("语文", typeof(string));
stuScoreTable.Columns.Add("数学", typeof(string));
stuScoreTable.Columns.Add("英语", typeof(string));
stuScoreTable.Rows.Add("学号", "姓名", "语文", "数学", "英语");
for (int i = ; i < scores.GetLength(); i++)
{
DataRow row = stuScoreTable.NewRow();
for (int j = ; j < scores.GetLength(); j++)
{
row[j] = scores[i, j];
}
stuScoreTable.Rows.Add(row);
}
ds.Tables.Add(stuScoreTable);
return ds;
}
}
}

5.相关结果如下

本文章代码已经放在github:https://github.com/xs0910/.NET-Core-EPPlus

ASP.NET Core使用EPPlus操作Excel的更多相关文章

  1. ASP.NET Core使用EPPlus导入导出Excel

    开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.NET Core中如何使用EPPlus组件导入导出Excel EPPlus: EPPlus是使用Open Office XML格式(xlsx) ...

  2. 使用EPPLUS操作EXcel

    使用EPPLUS操作EXcel 时间 2014-11-06 19:28:01  姜糖水 原文  http://www.cnphp6.com/archives/58648 主题 Excel 1 下载Ep ...

  3. C#使用第三方组件Epplus操作Excel表

    Epplus操作Excel基础详解 1.什么是Epplus Epplus是一个使用Open Office XML文件格式,能读写Excel2007/2010文件的开源组件,在导出Excel的时候不需要 ...

  4. Asp.Net Core 静态文件目录操作

    一.默认静态文件处理 Asp.Net Core的默认处理方式,将所有的静态文件都放在wwwroot文件夹中 1.默认配置,在启动文件Startup中 public void Configure(IAp ...

  5. 使用LinqToExcel和EPPlus操作excel

    1.使用LinqToExcel LinqToExcel是一个.net framework平台下开源项目,它主要实现了LINQ的语法查询Excel电子表格.类型之前的LINQToXXX如果你是LINQ语 ...

  6. Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)

    有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...

  7. 十二个 ASP.NET Core 例子——配置操作

    目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...

  8. c#用EPPLUS操作excel

    参考: http://www.cnblogs.com/rumeng/p/3785748.html http://www.cnblogs.com/libla/p/5824296.html#3818995 ...

  9. Asp.Net Core File的操作

    FileOption 内置类(通过服务注入) 该操作类的功能是实现对文件的删除,修改查询功能,该类基本完成了对文件的操作,同样是用最简单的代码实现了文件操作功能.

随机推荐

  1. TZOJ 4855 排座椅(贪心)

    描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来后,只有有限的D对同学上课时会交头接耳.同学们在教室 ...

  2. 关于jni调用报UnsatisfiedLinkError的可能

    一.说明 最近在做一个项目,需要使用java去调本地动态连接库,之前做测试的时候直接用pojo进行测试,是能够正常调用的.后面项目需要将接口封装为REST api,所以在spring boot上面开发 ...

  3. Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串

    Page<User> page = new Page<>();        User user = new User();        user.setAge(20);   ...

  4. nginx 反向代理 apache 服务

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时 ...

  5. 手机端图片预览和缩放js

    转至:http://blog.sina.com.cn/s/blog_c342e3090102vcxu.html 1.手机端的图片选择和预览 <input type="file" ...

  6. 摹客项目在2018年工信部"创客中国"名列10强并荣获二等奖

    2018“创客中国”互联网+大数据创新创业大赛(暨2018创客中国产业投资峰会)8月19日在厦门进行了总决赛.大赛由国家工业和信息化部.厦门市人民政府主办,厦门文广集团等承办.工信部信息中心领导.厦门 ...

  7. 8.14 右键自定义菜单 更加iframe 内容高度调整 iframe高度 js定时

    <div class="main_contain" id="z_div" style="position: relative;"> ...

  8. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  9. 2018.08.17 洛谷[POI2010]GRA-The Minima Game(线性dp)

    传送门 短代码神奇dp. 自己yy的思路居然1A了好高兴啊! 不难想到每个人选择的时候一定是取连续的最大的那一段数,自然需要先排序. 然后可以用dp[i]表示当前最大数是a[i]的时候先手可以获得的最 ...

  10. hdu-1124(数学问题,求n!的尾零的个数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1124 思路:每五个数1个0,5个5就2个0(不用管2,一定充足) #include<iostre ...