利用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内容转换成文件流的形式,并以下载的形式转给客户端 ...
随机推荐
- google开发者可以在中国访问啦!!!!
google开发者已经可以在中国访问了,只是好多内容还是不能访问的,例如Chrome
- elasticsearch【cat API,系统数据】指令汇总
本博文讲述的ES获取系统数据的API是基于Elasticsearch 2.4.1版本的. 0. overview a. 下面将要介绍的所有的指令,都支持一个查询参数v(verbose),用来显示详细的 ...
- 初级文法课程-第1课:名词的种类/名词的数/名词的所有格/冠词;be 动词、一般动词的现在式
January 31, 2016 Unit 1 名词和冠词 名词:n (noun) 作用:当主词.补语.受词 1.名词的种类 [单数和复数--I like dogs] 普通名词:book,pen ...
- 1.系统生命开发周期(SDLC)
哎,首先我恭喜我,这学期学了一门老师们都说非常重要,而学生们都说哪里重要的课,它就是与<软件工程>课齐名的<系统分析与设计>!!骚年,不背不记,你就死定了!! 首先俺领你认识一 ...
- Gemfile分平台加载gem
Gemfile分平台加载gem 区分平台以便加载不同的web server,象tzinfo-data只适用于windows # Windows does not include zoneinfo fi ...
- BizTalk调用WS-Security的web services
最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk调用OTM的web se ...
- RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
RT-Thread中使用线程这个概念,而不是任务.两者相似,我在这里把他的线程当作任务来理解了 1.任务处理: 动态任务相关API 创建任务:rt_thread_create函数,创建任务之后会返回r ...
- [Maven]Maven 那点事儿
0. 前言 Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他. 这兄弟是干嘛的? 他就是 Maven 的创始人,人们都尊称他为"Maven 他爸". 毋庸 ...
- 关于print和echo的区别
我的想法是print是函数,echo是语句.有一个点很难去说明就是为什么可以执行print 666.可以这样不加括号,象print(666);至于为什么一定要认为print是函数,而非网上说的语句和函 ...
- 在阿里云主机上基于CentOS用vsftpd搭建FTP服务器
最近需要在一台阿里云的云服务器上搭建FTP服务器,在这篇博文中分享一下我们根据实际需求进行的一些配置. ftp软件用的是vsftpd. vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...