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. 探讨 .NET 4 新增的 SortedSet 类

    http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html

  2. python作业之用户管理程序

    数据库的格式化如下 分别为姓名|密码|电话号码|邮箱|用户类型 admin|admin123.|28812341026|admin@126.com|1root|admin123.|1344566348 ...

  3. error: In function ‘void* opencv_showimg(void*)’:

    今天这个问题折磨了我一下午,终于知道是为什么了,心酸历程.....赶紧来记录一下 错误: /home/wj/workspace/Loitor_VI_Sensor_SDK_V1./SDK/src/cam ...

  4. JsonConvert.SerializeObject 空值处理

    var settings = new JsonSerializerSettings() { ContractResolver= new NullToEmptyStringResolver() }; v ...

  5. 删除SVN版本控制目录

    @echo On @Rem 删除SVN版本控制目录 @PROMPT [Com] @for /r . %%a in (.) do @if exist "%%a\.svn" rd /s ...

  6. Linux Doxygen的安装和使用

    一.简介 Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C.C++.Java.Objective-C和IDL语言,部分支持PHP.C#.注释的语法与Qt-Doc.K ...

  7. 关于调用Feign client超时得不到结果的问题

    需要在调用方的配置文件加入以下配置 hystrix.command.default.execution.timeout.enabled: false ribbon: ConnectTimeout: R ...

  8. IntelliJ IDEA 2017版 编译器使用学习笔记(三) (图文详尽版);IDE快捷键使用

    一.列操作 功能:操作多行列执行相同的功能,达到一次修改多行同类型数据的情况,如图:                 Json字符串,转为枚举类的字段: 首先进行,快捷键一行快速操作 1.选中命令,s ...

  9. lpm_clshift ip仿真

    今天仿真了一下lpm_clshift ip 其中din为输入的信号,sh_out为输出的信号. 以上为IP的设置. 可以看到din 的00000010 对应的step的2,一个时钟后sh_out的输出 ...

  10. ansible facts 获取硬件信息

    facts 指的是 ansible_facts 变量,ansible 中使用 setup 模块来获取,包含系统的大部分基础硬件信息, [root@10_1_162_39 host_vars]# ll ...