利用npoi导出Excel
npoi库是当下最流行的处理Excel、Word、PPT等Office文件格式
/// <summary>
/// 线下活动商品模型
/// </summary>
public class OffLineCart
{
/// <summary>
///
/// </summary>
public OffLineCart()
{
}
/// <summary>
/// 商品Id
/// </summary>
public string ProductId { get; set; }
/// <summary>
/// SKUId
/// </summary>
public string SkuId { get; set; }
/// <summary>
/// 商品现价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 商品数量
/// </summary>
public int Qty { get; set; }
}
/// <summary>
/// 线下活动提交订单集合
/// </summary>
public class OffLineOrderListModel
{
public OffLineOrderListModel()
{
}
/// <summary>
/// 子订单集合
/// </summary>
public IList<OffLineCart> OffLineCartList { get; set; }
/// <summary>
/// 子订单集合总价
/// </summary>
public decimal TotalPrice {
get
{
if (OffLineCartList.Count > 0)
{
var totalprice = OffLineCartList.Sum(q => q.Price * q.Qty);
return totalprice;
}
return 0;
}
}
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 地推码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 收货地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 订单号
/// </summary>
public string OrderNo { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 导出对应的订单集合
/// </summary>
/// <param name="offLineOrderListModelList"></param>
/// <param name="strHeaderText">表头文本</param>
public static MemoryStream DataTableToExcel(List<OffLineOrderListModel> offLineOrderListModelList , string strHeaderText)
{
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
//excel总共有11列
string[] columnarr = new string[]
{
"收货人姓名",
"收货人手机",
"收货人邮箱",
"收货人地址",
"销售人员编码",
"订单号",
"订单生成时间",
"地推版本号", //订单商品拆分,其余的订单信息单元格合并
"订单商品Id",
"订单商品SKUId",
"订单商品数量",
"订单商品单价", "订单总价"
};
HSSFRow firstRow = (HSSFRow)sheet.CreateRow(0);
firstRow.Height = 25*25;
//头标颜色标识
for (int i = 0; i < columnarr.Length; i++)
{
firstRow.CreateCell(i).CellStyle = GetCellStyle(workbook);
firstRow.CreateCell(i).SetCellValue(columnarr[i]);
} #region 设置各列的宽度 sheet.SetColumnWidth(0, 15 * 256);
sheet.SetColumnWidth(1, 15 * 256);
sheet.SetColumnWidth(2, 25 * 256);
sheet.SetColumnWidth(3, 30 * 256);
sheet.SetColumnWidth(4, 15 * 256);
sheet.SetColumnWidth(5, 25 * 256);
sheet.SetColumnWidth(6, 25 * 256);
sheet.SetColumnWidth(7, 25 * 256);
sheet.SetColumnWidth(8, 35 * 256);
sheet.SetColumnWidth(9, 35 * 256);
sheet.SetColumnWidth(10, 15 * 256);
sheet.SetColumnWidth(11, 15 * 256);
sheet.SetColumnWidth(12, 15 * 256); #endregion int rowIndex = 1;
foreach (OffLineOrderListModel offLineOrderListModel in offLineOrderListModelList)
{
foreach (var offLineCart in offLineOrderListModel.OffLineCartList)
{
int col = 0; HSSFRow aotherRow = (HSSFRow)sheet.CreateRow(rowIndex);
aotherRow.Height = 22*22;
aotherRow.CreateCell(col).SetCellValue(offLineOrderListModel.Name);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.Phone);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.Email);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.Address);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.Code);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.OrderNo);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"));
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.Version);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineCart.ProductId);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineCart.SkuId);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineCart.Qty);
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineCart.Price.ToString("N"));
col++;
sheet.GetRow(rowIndex).CreateCell(col).SetCellValue(offLineOrderListModel.TotalPrice.ToString("N"));
rowIndex++; }
//合并订单基本信息单元格
//要合并的单元格
string[] mergedCellStringArr = new[]
{
"收货人姓名",
"收货人手机",
"收货人邮箱",
"收货人地址",
"销售人员编码",
"订单号",
"订单生成时间",
"地推版本号"
};
for (int i = 0; i < mergedCellStringArr.Length; i++)
{ Region region = new Region(rowIndex-offLineOrderListModel.OffLineCartList.Count, i, rowIndex-1, i);
sheet.AddMergedRegion(region);
}
//合并订单总价单元格
sheet.AddMergedRegion(new Region(rowIndex - offLineOrderListModel.OffLineCartList.Count, columnarr.Length-1, rowIndex - 1, columnarr.Length-1)); }
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = 0;
//为什么会无法释放呢
//sheet.Dispose();
//workbook.Dispose();
workbook = null;
return ms;
}
}


利用npoi导出Excel的更多相关文章
- C#利用NPOI导出Excel类(简单版)
代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespac ...
- DateTable利用NPOI导出Excel 公共方法
protected void Export_Excel(DataTable dt) { string filename = "学生基本信息.xls"; ) { filename = ...
- NPOI导出Excel(含有超过65335的处理情况)
NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...
- 在服务端C#如何利用NPOI构建Excel模板
目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- .NET NPOI导出Excel详解
NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...
- 利用Servlet导出Excel
-----因为Excel可以打开HTML文件,因此可以利用页面的Form表单把页面中的table内容提交给Servlet,然后后台把提交上来的table内容转换成文件流的形式,并以下载的形式转给客户端 ...
随机推荐
- wget: unable to resolve host address 解决办法
vim /etc/resolv.conf 加上下面两句: nameserver 8.8.8.8 #google域名服务器nameserver 8.8.4.4 #google域名服务器
- 实战之中兴ZXHN F460光猫破解超级密码+开启无线路由功能
本文面向小白用户,即使你不懂电脑看完你也会破解光猫,网上有些文章的操作方法是错误的.按照我这篇文章,只要型号对,那么肯定没问题!电信光纤入户,家里用的是电信送的中兴查看 ZXHN F460 中的全部文 ...
- XE8 (RTM) Android SDK 更新安装(转)
原地址:http://www.cnblogs.com/onechen/p/4379924.html 适用:XE8 Android 平台 问题:安装 XE8 RTM 时,如果勾选了 Android SD ...
- 学习SQL的点点滴滴(五)-DELETE小计
惨痛的教训: 某次在执行delete时,一时疏忽忘记写where条件了, 1.删除tb_mobile_cust_micromsg中的内容,前提是c_customer这个字段的值与#datamod表中c ...
- Building GCC 4.1.2 in CentOS 7 for Maya API development
Following the official guid: http://help.autodesk.com/cloudhelp/2015/ENU/Maya-SDK/files/Setting_up_y ...
- Web性能测试工具JMeter
做Web方面的黑盒测试,也就是功能测试,基本不需要什么测试工具,都是直接打开浏览器访问,点一点界面就行. 现在流行的移动互联网应用,客户端和服务端的开发是分离的,两者开发进度肯定不一样,可能存在服务端 ...
- mybatis传递参数到mapping.xml
第一种方案 ,通过序号传递 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id ...
- CentOS下Apache配置多域名或者多端口映射
CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...
- 【javascript杂谈】你所不知道的replace函数
前言 最近在做面试题的时候总会用到这个函数,这个函数总是和正则表达式联系到一起,并且效果很是不错,总能很简单出色的完成字符串的实际问题,大家肯定都会使用这个函数,像我一样的初学者可能对这个函数的了解还 ...
- MVC 访问IFrame页面Session过期后跳转到登录页面
Web端开发时,用户登录后往往会通过Session来保存用户信息,Session存放在服务器,当用户长时间不操作的时候,我们会希望服务器保存的Session过期,这个时候,因为Session中的用户信 ...