使用NPOI导出Excel文件
使用NPOI导出Excel文件,本实例使用了ASP.NET MVC。
1、使用NPOI导出Excel文件
实例:导出商品列表。
要求:1、通过NPOI导出导出商品列表信息;
2、使用Excel函数计算商品总金额;
在Controllers控制器目录中创建ExportController.cs控制器
- using System.IO;
- using NPOI;
- using NPOI.POIFS;
- using NPOI.HSSF;
- using NPOI.Util;
- using NPOI.HSSF.UserModel;
- using NPOI.HPSF;
- using NPOI.SS.UserModel;
- using NPOI.SS.Util;
- using NPOI.HSSF.Util;
- /// <summary>
- /// 导出商品列表
- /// </summary>
- public FileResult ExportProduct()
- {
- //创建一个新的xls文件
- HSSFWorkbook workbook = new HSSFWorkbook();
- //创建DocumentSummaryInformation(选填)
- DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
- dsi.Company = "深圳市电子商务有限公司";
- dsi.Category = "报表";
- //创建SummaryInformation(选填)
- SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
- si.Subject = "商品列表";
- si.Title = "商品列表导出";
- si.Author = "Kevin Pan";
- //把创建好的对象赋给Workbook
- workbook.DocumentSummaryInformation = dsi;
- workbook.SummaryInformation = si;
- //创建一个Sheet
- ISheet sheet = workbook.CreateSheet("Sheet1");
- sheet.DefaultRowHeight = 300;
- //创建标题
- IRow rowTitle = sheet.CreateRow(0);
- rowTitle.Height = 500;
- ICellStyle styleTitle = workbook.CreateCellStyle();
- styleTitle.Alignment = HorizontalAlignment.Center;
- styleTitle.VerticalAlignment = VerticalAlignment.Center;
- IFont fontTitle = workbook.CreateFont();
- fontTitle.FontName = "宋体";
- fontTitle.FontHeightInPoints = 18;
- styleTitle.SetFont(fontTitle);
- ICell cellTitle = rowTitle.CreateCell(0);
- cellTitle.SetCellValue("商品列表");
- cellTitle.CellStyle = styleTitle;
- sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5)); //合并单元格
- //创建表格样式
- IFont font = workbook.CreateFont();
- font.FontName = "宋体";
- font.FontHeightInPoints = 10;
- ICellStyle style = workbook.CreateCellStyle(); ;
- style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
- style.BottomBorderColor = HSSFColor.Black.Index;
- style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
- style.LeftBorderColor = HSSFColor.Black.Index;
- style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
- style.RightBorderColor = HSSFColor.Black.Index;
- style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
- style.TopBorderColor = HSSFColor.Black.Index;
- style.Alignment = HorizontalAlignment.Center;
- style.SetFont(font);
- //创建表头
- IRow rowHead = sheet.CreateRow(1);
- rowHead.CreateCell(0).SetCellValue("序号");
- rowHead.GetCell(0).CellStyle = style;
- sheet.SetColumnWidth(0, 256 * 5);
- rowHead.CreateCell(1).SetCellValue("商品名称");
- rowHead.GetCell(1).CellStyle = style;
- sheet.SetColumnWidth(1, 256 * 25);
- rowHead.CreateCell(2).SetCellValue("商品品牌");
- rowHead.GetCell(2).CellStyle = style;
- sheet.SetColumnWidth(2, 256 * 20);
- rowHead.CreateCell(3).SetCellValue("商品价格");
- rowHead.GetCell(3).CellStyle = style;
- sheet.SetColumnWidth(3, 256 * 15);
- rowHead.CreateCell(4).SetCellValue("数量");
- rowHead.GetCell(4).CellStyle = style;
- sheet.SetColumnWidth(3, 256 * 10);
- rowHead.CreateCell(5).SetCellValue("总金额");
- rowHead.GetCell(5).CellStyle = style;
- sheet.SetColumnWidth(3, 256 * 15);
- //获取商品列表数据
- List<ProductModel> dataList = GetProductList();
- //绑定表内容
- int rowindex = 2;
- int xh = 1;
- foreach (var item in dataList)
- {
- IRow rowContent = sheet.CreateRow(rowindex);
- rowContent.CreateCell(0).SetCellValue(xh);
- rowContent.GetCell(0).CellStyle = style;
- rowContent.CreateCell(1).SetCellValue(item.ProductName);
- rowContent.GetCell(1).CellStyle = style;
- rowContent.CreateCell(2).SetCellValue(item.ProductBrand);
- rowContent.GetCell(2).CellStyle = style;
- rowContent.CreateCell(3).SetCellValue(item.ProductPrice.ToString());
- rowContent.GetCell(3).CellStyle = style;
- rowContent.CreateCell(4).SetCellValue(item.Quantity.ToString());
- rowContent.GetCell(4).CellStyle = style;
- //设置函数,计算总金额
- rowContent.CreateCell(5).SetCellFormula(String.Format("$D{0}*$E{0}", rowindex+1));
- rowContent.GetCell(5).CellStyle = style;
- rowindex++;
- xh++;
- }
- //输出
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- workbook.Write(ms);
- ms.Seek(0, SeekOrigin.Begin);
- return File(ms, "application/vnd.ms-excel", "商品列表.xls");
- }
2、基于.xls模板导出Excel文件
实例:基于.xls模板导出订单信息(如图 1)
要求:1、使用基于.xls模板导出订单信息;
2、使用Excel函数计算订单和商品的总金额;
图 1 基于.xls模板导出订单信息
- /// <summary>
- /// 导出订单信息
- /// </summary>
- public FileResult ExportOrder()
- {
- //获取订单信息
- OrderModel order = GetOrderInfo();
- //获取Excel模板
- string fileName = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/Template/order.xls";
- FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
- //通过模板创建一个xls文件
- HSSFWorkbook workbook = new HSSFWorkbook(file);
- //获取Sheet
- ISheet sheet = workbook.GetSheet("Sheet1");
- //导出订单信息
- sheet.GetRow(1).CreateCell(1).SetCellValue(order.OrderNo);
- sheet.GetRow(1).CreateCell(3).SetCellValue(order.OrderTime.ToString("yyyy-MM-dd HH:mm:ss"));
- sheet.GetRow(1).CreateCell(5).SetCellFormula("SUM(F6:F100)"); //设置函数,计算订单总金额
- sheet.GetRow(2).CreateCell(1).SetCellValue(order.CustomName);
- sheet.GetRow(2).CreateCell(3).SetCellValue(order.CustomAddress);
- //导出产品列表
- if (order.ProductList != null && order.ProductList.Count > 0)
- {
- //创建表头
- IRow rowHead = sheet.CreateRow(4);
- rowHead.CreateCell(0).SetCellValue("序号");
- sheet.SetColumnWidth(0, 256 * 15);
- rowHead.CreateCell(1).SetCellValue("商品名称");
- sheet.SetColumnWidth(1, 256 * 25);
- rowHead.CreateCell(2).SetCellValue("商品品牌");
- sheet.SetColumnWidth(2, 256 * 20);
- rowHead.CreateCell(3).SetCellValue("商品价格");
- sheet.SetColumnWidth(3, 256 * 15);
- rowHead.CreateCell(4).SetCellValue("数量");
- sheet.SetColumnWidth(3, 256 * 10);
- rowHead.CreateCell(5).SetCellValue("总金额");
- sheet.SetColumnWidth(3, 256 * 15);
- //绑定表内容
- int rowindex = 5;
- int xh = 1;
- foreach (var item in order.ProductList)
- {
- IRow rowContent = sheet.CreateRow(rowindex);
- rowContent.CreateCell(0).SetCellValue(xh);
- rowContent.CreateCell(1).SetCellValue(item.ProductName);
- rowContent.CreateCell(2).SetCellValue(item.ProductBrand);
- rowContent.CreateCell(3).SetCellValue(item.ProductPrice.ToString());
- rowContent.CreateCell(4).SetCellValue(item.Quantity.ToString());
- rowContent.CreateCell(5).SetCellFormula(String.Format("$D{0}*$E{0}", rowindex + 1)); //设置函数,计算总金额
- rowindex++;
- xh++;
- }
- }
- //输出
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- workbook.Write(ms);
- ms.Seek(0, SeekOrigin.Begin);
- return File(ms, "application/vnd.ms-excel", "订单信息.xls");
- }
3、其他代码
3.1 实体类
在Models模型目录中创建ProductModel.cs和OrderModel.cs实体类
- /// <summary>
- /// 商品信息实体类
- /// </summary>
- public class ProductModel
- {
- /// <summary>
- /// 商品名称
- /// </summary>
- public string ProductName { get; set; }
- /// <summary>
- /// 商品品牌
- /// </summary>
- public string ProductBrand { get; set; }
- /// <summary>
- /// 商品价格
- /// </summary>
- public decimal ProductPrice { get; set; }
- /// <summary>
- /// 数量
- /// </summary>
- public int Quantity { get; set; }
- }
- /// <summary>
- /// 订单信息实体类
- /// </summary>
- public class OrderModel
- {
- /// <summary>
- /// 订单编号
- /// </summary>
- public string OrderNo { get; set; }
- /// <summary>
- /// 下单时间
- /// </summary>
- public DateTime OrderTime { get; set; }
- /// <summary>
- /// 总金额
- /// </summary>
- public decimal Amount { get; set; }
- /// <summary>
- /// 客户名称
- /// </summary>
- public string CustomName { get; set; }
- /// <summary>
- /// 客户地址
- /// </summary>
- public string CustomAddress { get; set; }
- /// <summary>
- /// 商品列表
- /// </summary>
- public List<ProductModel> ProductList { get; set; }
- }
3.2 获取商品和订单数据
- /// <summary>
- /// 获取商品列表
- /// </summary>
- public List<ProductModel> GetProductList()
- {
- List<ProductModel> productList = new List<ProductModel>();
- ProductModel product1 = new ProductModel(){
- ProductName = "苹果IPhone6手机",
- ProductBrand = "苹果",
- ProductPrice = 4999,
- Quantity = 4
- };
- ProductModel product2 = new ProductModel()
- {
- ProductName = "三星智能手机",
- ProductBrand = "三星",
- ProductPrice = 3800,
- Quantity = 3
- };
- ProductModel product3 = new ProductModel()
- {
- ProductName = "松下液晶电视机",
- ProductBrand = "松下",
- ProductPrice = 3800,
- Quantity = 2
- };
- productList.Add(product1);
- productList.Add(product2);
- productList.Add(product3);
- return productList;
- }
- /// <summary>
- /// 获取订单信息
- /// </summary>
- public OrderModel GetOrderInfo()
- {
- OrderModel order = new OrderModel() {
- OrderNo = "P20140929001",
- OrderTime = DateTime.Now,
- CustomName = "张三",
- CustomAddress = "广东省深圳市罗湖区",
- ProductList = GetProductList()
- };
- return order;
- }
3.3 视图
在Views视图目录中创建Index.cshtml
- <h2>使用NPOI生成Excel文件</h2>
- <a href="@Url.Action("ExportProduct","Export")">导出商品</a>
- <a href="@Url.Action("ExportOrder","Export")">导出订单</a>
使用NPOI导出Excel文件的更多相关文章
- 关于NPOI导出excel文件(xls和xlsx两种格式)提示格式不符的问题
这两天在做导出excel文件的时候遇到这个问题 本来我导出的格式是xlsx格式的,但是下载得到的文件格式变成了xls, 一开始以为是返回的contenttype设置错了 return File(ms, ...
- 基于Vue + axios + WebApi + NPOI导出Excel文件
一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页 ...
- C# 未安装Office环境下使用NPOI导出Excel文件
1.NuGet直接安装NPOI程序包: 2. using NPOI.XSSF.UserModel; 3.导出Excel代码: private void TsbExport2ExcelClick(obj ...
- asp.net Mvc 使用NPOI导出Excel文件
1.新建MVC项目,新建控制器.视图 添加控制器: 添加视图(将使用布局页前面的复选框里的勾勾去掉) 2.在Models里新建一个类 public class Shop { /// <summa ...
- C# DataGridview用NPOI导出Excel文件
导出excel我用的是nuget 的NPOI,直接在项目中添加的,引用到项目中,下面是截图: 下面我把ExcelHelper贴出来 public static class ExcelHelper { ...
- 使用 NPOI 导出 Excel 文件
[NPOI简介] NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者 ...
- NPOI导出Excel文件,对单元格的一些设置
HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...
- 使用NPOI或EPPlus来导出Excel文件实例,可在Excel文件加密
使用NPOI.dll组件来导出Excel文件,并设置样式,Nuget引用即可. packages\NPOI.2.1.3.1\lib\net20\NPOI.dll #region Excel prote ...
- C#,使用NPOI,导出excel文件
/// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...
随机推荐
- COM组件双接口对象模型
模型如下: 这里COM对象一共实现了三个接口,IUnknown,IDispatch, Ixxx. 每个COM都必须实现IUnknown,不考虑在内的话共实现了IDispatch和自定义接口Ixxx两个 ...
- https证书制作及springboot配置https
1.生成秘钥 openssl genrsa -out private.key 2048 2.生成用于申请请求的证书文件csr,一般会将该文件发送给CA机构进行认证,本例使用自签名证书 openssl ...
- kotlin 委托类的初始化函数
import java.beans.AppletInitializer import kotlin.reflect.KProperty fun main(arg: Array<String> ...
- XML解析思想
获取文档中的数据: 反序列化[巧记:反读] 把内存中的数据存储到文档中: 序列化[巧记:序写] XML解析思想 DOM: 就是将文档中的数据全部加载到内存,在内存中形成DOM树,然后对数据进行增删改查 ...
- 002-多线程-JUC集合-List-CopyOnWriteArrayList
一.概述 CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略 ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_5.RabbitMQ研究-入门程序-生产者
1)java client 生产者和消费者都属于客户端,rabbitMQ的java客户端如下: 我们先用 rabbitMQ官方提供的java client测试,目的是对RabbitMQ的交互过程有个清 ...
- Python常用模块安装
1. python操作MySQL数据库的依赖包MySQLdb ImportError: No module named MySQLdb 安装方式: yum install MySQL-python 2 ...
- ubuntu kylin 18.04安装docker笔记
删除原有的docker应用(如果有的话): sudo apt-get remove docker docker-engine docker.io 更新一下: sudo apt-get update 下 ...
- 取消一个本地svn目录与svn的联系
第一种方法: 直接.逐级地删除目标目录中的隐藏属性的.svn目录 这个方法试了,好牛蛋...,省事,快速... 第二种方法: 如果用的是TortoiseSVN客户端,则先在另外一处建立一个新目录A,右 ...
- golang继承与接口
继承 结构体 Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继 承在内的大量面向对象特性,只保留了组合(composition)这个最基础的特性. 组合 ...