博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用NPOI导出Excel文件
阅读量:6342 次
发布时间:2019-06-22

本文共 8266 字,大约阅读时间需要 27 分钟。

使用NPOI导出Excel文件,本实例使用了ASP.NET MVC。

1、使用NPOI导出Excel文件

实例:导出商品列表。

要求:1、通过NPOI导出导出商品列表信息;

2、使用Excel函数计算商品总金额;

在Controllers控制器目录中创建ExportController.cs控制器

 

[csharp]   
 
  1. using System.IO;  
  2. using NPOI;  
  3. using NPOI.POIFS;  
  4. using NPOI.HSSF;  
  5. using NPOI.Util;  
  6. using NPOI.HSSF.UserModel;  
  7. using NPOI.HPSF;  
  8. using NPOI.SS.UserModel;  
  9. using NPOI.SS.Util;  
  10. using NPOI.HSSF.Util;  

 

 

[csharp]   
 
  1. /// <summary>  
  2. /// 导出商品列表  
  3. /// </summary>  
  4. public FileResult ExportProduct()  
  5. {  
  6.     //创建一个新的xls文件  
  7.     HSSFWorkbook workbook = new HSSFWorkbook();  
  8.   
  9.     //创建DocumentSummaryInformation(选填)  
  10.     DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();  
  11.     dsi.Company = "深圳市电子商务有限公司";  
  12.     dsi.Category = "报表";  
  13.     //创建SummaryInformation(选填)  
  14.     SummaryInformation si = PropertySetFactory.CreateSummaryInformation();  
  15.     si.Subject = "商品列表";  
  16.     si.Title = "商品列表导出";  
  17.     si.Author = "Kevin Pan";  
  18.     //把创建好的对象赋给Workbook  
  19.     workbook.DocumentSummaryInformation = dsi;  
  20.     workbook.SummaryInformation = si;  
  21.   
  22.     //创建一个Sheet  
  23.     ISheet sheet = workbook.CreateSheet("Sheet1");  
  24.     sheet.DefaultRowHeight = 300;  
  25.     //创建标题  
  26.     IRow rowTitle = sheet.CreateRow(0);  
  27.     rowTitle.Height = 500;  
  28.     ICellStyle styleTitle = workbook.CreateCellStyle();  
  29.     styleTitle.Alignment = HorizontalAlignment.Center;  
  30.     styleTitle.VerticalAlignment = VerticalAlignment.Center;  
  31.     IFont fontTitle = workbook.CreateFont();  
  32.     fontTitle.FontName = "宋体";  
  33.     fontTitle.FontHeightInPoints = 18;  
  34.     styleTitle.SetFont(fontTitle);  
  35.     ICell cellTitle = rowTitle.CreateCell(0);  
  36.     cellTitle.SetCellValue("商品列表");  
  37.     cellTitle.CellStyle = styleTitle;  
  38.     sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));  //合并单元格  
  39.     //创建表格样式  
  40.     IFont font = workbook.CreateFont();  
  41.     font.FontName = "宋体";  
  42.     font.FontHeightInPoints = 10;  
  43.     ICellStyle style = workbook.CreateCellStyle(); ;  
  44.     style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;  
  45.     style.BottomBorderColor = HSSFColor.Black.Index;  
  46.     style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;  
  47.     style.LeftBorderColor = HSSFColor.Black.Index;  
  48.     style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;  
  49.     style.RightBorderColor = HSSFColor.Black.Index;  
  50.     style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;  
  51.     style.TopBorderColor = HSSFColor.Black.Index;  
  52.     style.Alignment = HorizontalAlignment.Center;  
  53.     style.SetFont(font);  
  54.     //创建表头  
  55.     IRow rowHead = sheet.CreateRow(1);  
  56.     rowHead.CreateCell(0).SetCellValue("序号");  
  57.     rowHead.GetCell(0).CellStyle = style;  
  58.     sheet.SetColumnWidth(0, 256 * 5);  
  59.   
  60.     rowHead.CreateCell(1).SetCellValue("商品名称");  
  61.     rowHead.GetCell(1).CellStyle = style;  
  62.     sheet.SetColumnWidth(1, 256 * 25);  
  63.   
  64.     rowHead.CreateCell(2).SetCellValue("商品品牌");  
  65.     rowHead.GetCell(2).CellStyle = style;  
  66.     sheet.SetColumnWidth(2, 256 * 20);  
  67.   
  68.     rowHead.CreateCell(3).SetCellValue("商品价格");  
  69.     rowHead.GetCell(3).CellStyle = style;  
  70.     sheet.SetColumnWidth(3, 256 * 15);  
  71.   
  72.     rowHead.CreateCell(4).SetCellValue("数量");  
  73.     rowHead.GetCell(4).CellStyle = style;  
  74.     sheet.SetColumnWidth(3, 256 * 10);  
  75.   
  76.     rowHead.CreateCell(5).SetCellValue("总金额");  
  77.     rowHead.GetCell(5).CellStyle = style;  
  78.     sheet.SetColumnWidth(3, 256 * 15);  
  79.   
  80.     //获取商品列表数据  
  81.     List<ProductModel> dataList = GetProductList();  
  82.     //绑定表内容  
  83.     int rowindex = 2;  
  84.     int xh = 1;  
  85.     foreach (var item in dataList)  
  86.     {  
  87.         IRow rowContent = sheet.CreateRow(rowindex);  
  88.         rowContent.CreateCell(0).SetCellValue(xh);  
  89.         rowContent.GetCell(0).CellStyle = style;  
  90.   
  91.         rowContent.CreateCell(1).SetCellValue(item.ProductName);  
  92.         rowContent.GetCell(1).CellStyle = style;  
  93.   
  94.         rowContent.CreateCell(2).SetCellValue(item.ProductBrand);  
  95.         rowContent.GetCell(2).CellStyle = style;  
  96.   
  97.         rowContent.CreateCell(3).SetCellValue(item.ProductPrice.ToString());  
  98.         rowContent.GetCell(3).CellStyle = style;  
  99.   
  100.         rowContent.CreateCell(4).SetCellValue(item.Quantity.ToString());  
  101.         rowContent.GetCell(4).CellStyle = style;  
  102.         //设置函数,计算总金额  
  103.         rowContent.CreateCell(5).SetCellFormula(String.Format("$D{0}*$E{0}", rowindex+1));  
  104.         rowContent.GetCell(5).CellStyle = style;  
  105.   
  106.         rowindex++;  
  107.         xh++;  
  108.     }  
  109.   
  110.     //输出   
  111.     System.IO.MemoryStream ms = new System.IO.MemoryStream();  
  112.     workbook.Write(ms);  
  113.     ms.Seek(0, SeekOrigin.Begin);  
  114.     return File(ms, "application/vnd.ms-excel", "商品列表.xls");  
  115. }  

 

2、基于.xls模板导出Excel文件

实例:基于.xls模板导出订单信息(如图 1)

要求:1、使用基于.xls模板导出订单信息;

2、使用Excel函数计算订单和商品的总金额;

图 1 基于.xls模板导出订单信息

 

[csharp]   
 
  1. /// <summary>  
  2. /// 导出订单信息  
  3. /// </summary>  
  4. public FileResult ExportOrder()  
  5. {   
  6.     //获取订单信息  
  7.     OrderModel order = GetOrderInfo();  
  8.     //获取Excel模板  
  9.     string fileName = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/Template/order.xls";  
  10.     FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);  
  11.     //通过模板创建一个xls文件  
  12.     HSSFWorkbook workbook = new HSSFWorkbook(file);  
  13.     //获取Sheet  
  14.     ISheet sheet = workbook.GetSheet("Sheet1");  
  15.     //导出订单信息  
  16.     sheet.GetRow(1).CreateCell(1).SetCellValue(order.OrderNo);  
  17.     sheet.GetRow(1).CreateCell(3).SetCellValue(order.OrderTime.ToString("yyyy-MM-dd HH:mm:ss"));  
  18.     sheet.GetRow(1).CreateCell(5).SetCellFormula("SUM(F6:F100)"); //设置函数,计算订单总金额  
  19.     sheet.GetRow(2).CreateCell(1).SetCellValue(order.CustomName);  
  20.     sheet.GetRow(2).CreateCell(3).SetCellValue(order.CustomAddress);  
  21.     //导出产品列表  
  22.     if (order.ProductList != null && order.ProductList.Count > 0)  
  23.     {  
  24.         //创建表头  
  25.         IRow rowHead = sheet.CreateRow(4);  
  26.         rowHead.CreateCell(0).SetCellValue("序号");  
  27.         sheet.SetColumnWidth(0, 256 * 15);  
  28.   
  29.         rowHead.CreateCell(1).SetCellValue("商品名称");  
  30.         sheet.SetColumnWidth(1, 256 * 25);  
  31.   
  32.         rowHead.CreateCell(2).SetCellValue("商品品牌");  
  33.         sheet.SetColumnWidth(2, 256 * 20);  
  34.   
  35.         rowHead.CreateCell(3).SetCellValue("商品价格");  
  36.         sheet.SetColumnWidth(3, 256 * 15);  
  37.   
  38.         rowHead.CreateCell(4).SetCellValue("数量");  
  39.         sheet.SetColumnWidth(3, 256 * 10);  
  40.   
  41.         rowHead.CreateCell(5).SetCellValue("总金额");  
  42.         sheet.SetColumnWidth(3, 256 * 15);  
  43.   
  44.         //绑定表内容  
  45.         int rowindex = 5;  
  46.         int xh = 1;  
  47.         foreach (var item in order.ProductList)  
  48.         {  
  49.             IRow rowContent = sheet.CreateRow(rowindex);  
  50.             rowContent.CreateCell(0).SetCellValue(xh);  
  51.             rowContent.CreateCell(1).SetCellValue(item.ProductName);  
  52.             rowContent.CreateCell(2).SetCellValue(item.ProductBrand);  
  53.             rowContent.CreateCell(3).SetCellValue(item.ProductPrice.ToString());  
  54.             rowContent.CreateCell(4).SetCellValue(item.Quantity.ToString());  
  55.             rowContent.CreateCell(5).SetCellFormula(String.Format("$D{0}*$E{0}", rowindex + 1));  //设置函数,计算总金额  
  56.             rowindex++;  
  57.             xh++;  
  58.         }  
  59.     }  
  60.   
  61.     //输出   
  62.     System.IO.MemoryStream ms = new System.IO.MemoryStream();  
  63.     workbook.Write(ms);  
  64.     ms.Seek(0, SeekOrigin.Begin);  
  65.     return File(ms, "application/vnd.ms-excel", "订单信息.xls");  
  66. }  

 

3、其他代码

3.1 实体类

在Models模型目录中创建ProductModel.cs和OrderModel.cs实体类

 

[csharp]   
 
  1. /// <summary>  
  2. /// 商品信息实体类  
  3. /// </summary>  
  4. public class ProductModel  
  5. {  
  6.     /// <summary>  
  7.     /// 商品名称  
  8.     /// </summary>  
  9.     public string ProductName { get; set; }  
  10.   
  11.     /// <summary>  
  12.     /// 商品品牌  
  13.     /// </summary>  
  14.     public string ProductBrand { get; set; }  
  15.   
  16.     /// <summary>  
  17.     /// 商品价格  
  18.     /// </summary>  
  19.     public decimal ProductPrice { get; set; }  
  20.   
  21.     /// <summary>  
  22.     /// 数量  
  23.     /// </summary>  
  24.     public int Quantity { get; set; }  
  25. }  

 

 

[csharp]   
 
  1. /// <summary>  
  2. /// 订单信息实体类  
  3. /// </summary>  
  4. public class OrderModel  
  5. {  
  6.     /// <summary>  
  7.     /// 订单编号  
  8.     /// </summary>  
  9.     public string OrderNo { get; set; }  
  10.   
  11.     /// <summary>  
  12.     /// 下单时间  
  13.     /// </summary>  
  14.     public DateTime OrderTime { get; set; }  
  15.   
  16.     /// <summary>  
  17.     /// 总金额  
  18.     /// </summary>  
  19.     public decimal Amount { get; set; }  
  20.   
  21.     /// <summary>  
  22.     /// 客户名称  
  23.     /// </summary>  
  24.     public string CustomName { get; set; }  
  25.   
  26.     /// <summary>  
  27.     /// 客户地址  
  28.     /// </summary>  
  29.     public string CustomAddress { get; set; }  
  30.   
  31.     /// <summary>  
  32.     /// 商品列表  
  33.     /// </summary>  
  34.     public List<ProductModel> ProductList { get; set; }  
  35. }  

 

3.2 获取商品和订单数据

 

[csharp]   
 
  1. /// <summary>  
  2. /// 获取商品列表  
  3. /// </summary>  
  4. public List<ProductModel> GetProductList()  
  5. {  
  6.     List<ProductModel> productList = new List<ProductModel>();  
  7.     ProductModel product1 = new ProductModel(){  
  8.         ProductName = "苹果IPhone6手机",  
  9.         ProductBrand = "苹果",  
  10.         ProductPrice = 4999,  
  11.         Quantity = 4  
  12.     };  
  13.     ProductModel product2 = new ProductModel()  
  14.     {  
  15.         ProductName = "三星智能手机",  
  16.         ProductBrand = "三星",  
  17.         ProductPrice = 3800,  
  18.         Quantity = 3  
  19.     };  
  20.     ProductModel product3 = new ProductModel()  
  21.     {  
  22.         ProductName = "松下液晶电视机",  
  23.         ProductBrand = "松下",  
  24.         ProductPrice = 3800,  
  25.         Quantity = 2  
  26.     };  
  27.     productList.Add(product1);  
  28.     productList.Add(product2);  
  29.     productList.Add(product3);  
  30.     return productList;  
  31. }  
  32.   
  33. /// <summary>  
  34. /// 获取订单信息  
  35. /// </summary>  
  36. public OrderModel GetOrderInfo()  
  37. {  
  38.     OrderModel order = new OrderModel() {   
  39.         OrderNo = "P20140929001",  
  40.         OrderTime = DateTime.Now,  
  41.         CustomName = "张三",  
  42.         CustomAddress = "广东省深圳市罗湖区",  
  43.         ProductList = GetProductList()  
  44.     };  
  45.     return order;  
  46. }  

3.3 视图

在Views视图目录中创建Index.cshtml

 

[html]   
 
  1. <h2>使用NPOI生成Excel文件</h2>  
  2. <href="@Url.Action("ExportProduct","Export")">导出商品</a>  
  3. <href="@Url.Action("ExportOrder","Export")">导出订单</a

转载于:https://www.cnblogs.com/sendreceive/p/7839064.html

你可能感兴趣的文章
poj-1056-IMMEDIATE DECODABILITY(字典)
查看>>
区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
查看>>
小程序爆红 专家:对简单APP是巨大打击
查看>>
FarBox--另类有趣的网站服务【转】
查看>>
在非纯色背景上,叠加背景透明的BUTTON和STATIC_TEXT控件
查看>>
Distributed2:Linked Server Login 添加和删除
查看>>
Java中取两位小数
查看>>
使用 ftrace 调试 Linux 内核【转】
查看>>
唯一聚集索引上的唯一和非唯一非聚集索引
查看>>
Spark新愿景:让深度学习变得更加易于使用——见https://github.com/yahoo/TensorFlowOnSpark...
查看>>
linux磁盘配额
查看>>
NFS文件共享服务器的搭建
查看>>
IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
查看>>
Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
查看>>
ARM汇编指令格式
查看>>
HDU-2044-一只小蜜蜂
查看>>
HDU-1394-Minimum Inversion Number
查看>>
[转] createObjectURL方法 实现本地图片预览
查看>>
JavaScript—DOM编程核心.
查看>>
JavaScript碎片
查看>>