Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行
Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行
模版格式,图格式是最简单的格式,但实际效果不是这种,实际效果图如图2

图2 ,注意看红色部分,一对一是正常的,但是有一对多的订单,就得把前面的合并居中,后面对应多行显示

var templatePath = Server.MapPath(@"/Template/区域订单列表导出模板.xlsx");
//NPOIHelper.GetTemplateToExcel(templatePath,list);
Workbook workbook = new Workbook();
workbook.Open(templatePath);
Cells cells= workbook.Worksheets[].Cells;
if (list != null)
{
int row = ;//交易单行数
//获取交易订单列表
foreach (var item in list)
{
var startmergepos = row;
//// 获取交易订单对应的订单数,做合并行准备
var rowsorder = item.OrderList.Count; //合并单元格cells.Merge(1, 0, 3, 1) 参数1代表当前行,参数0代表当前行当前列即第一行第一列,参数3合并的行数,参数4合并的列数
cells.Merge(startmergepos, , rowsorder, );
cells[startmergepos, ].PutValue(item.DealCode);
cells[startmergepos, ].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); //设置单元格合并后垂直居中显示 cells.Merge(startmergepos, , rowsorder, );
cells[startmergepos, ].PutValue(item.TotalProductMoney.ToString("f2"));
cells[startmergepos, ].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); cells.Merge(startmergepos, , rowsorder, );
cells[startmergepos, ].PutValue(item.DeliveryFee.ToString("f2"));
cells[startmergepos, ].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); cells.Merge(startmergepos, , rowsorder, );
cells[startmergepos, ].PutValue((item.TotalMoney-item.RealityMoney).ToString("f2"));
cells[startmergepos, ].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); cells.Merge(startmergepos, , rowsorder, );
cells[startmergepos, ].PutValue(item.PayMentStr);
cells[startmergepos, ].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); cells.Merge(startmergepos, , rowsorder, );
cells[startmergepos,].PutValue(item.PayState==?"未付款":"已付款");
cells[startmergepos, ].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center }); for (int i = ; i < rowsorder; i++)
{
cells[row + i, ].PutValue(item.OrderList[i].OrderId);
if (item.OrderList[i].ListOrder_Items!=null&&item.OrderList[i].ListOrder_Items.Count > )
{
cells[row + i, ].PutValue(item.OrderList[i].ListOrder_Items[].ProductName);
cells[row + i, ].PutValue(item.OrderList[i].ListOrder_Items[].SpecHtml);
cells[row + i, ].SetStyle(new Style() { IsTextWrapped=true});
//cells.SetRowHeight(row + i, 200);//设置单元格高度
cells[row + i, ].PutValue(item.OrderList[i].ListOrder_Items[].Quantity);
}
else
{
cells[row + i, ].PutValue("");
cells[row + i, ].PutValue("");
cells[row + i, ].PutValue("");
}
cells[row + i, ].PutValue(item.OrderList[i].TotalMoney);
cells[row + i, ].PutValue(item.OrderList[i].UserName);
cells[row + i, ].PutValue(item.OrderList[i].DepartMentName);
cells[row + i, ].PutValue(item.OrderList[i].CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
cells[row + i, ].PutValue(item.OrderList[i].StateString);
if (item.OrderList[i].IsStock == )
{
cells[row + i, ].PutValue("生产单");
}
else if (item.OrderList[i].IsStock == )
{
cells[row + i, ].PutValue("备库单");
}
else if (item.OrderList[i].IsStock == )
{
cells[row + i, ].PutValue("出库单");
}
}
//这是合并单元格后的行数,一定注意,要加上合并的行数,不然会实现不了上图的效果
row = startmergepos + rowsorder;
} }
var filename = HttpUtility.UrlEncode("区域订单列表", System.Text.Encoding.UTF8) +DateTime.Now.ToString("yyyyMMddhhmmss")+ ".xls";
//转换成流字节,输出浏览器下载
var byti = workbook.SaveToStream().GetBuffer();
////通知浏览器保存文件,其实也就是输出到浏览器
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename);
Response.BinaryWrite(byti);
Response.Flush();
Response.Close();
一般步骤:
var templatePath = Server.MapPath(@"/Template/区域订单列表导出模板.xlsx");
1、初始化模版
Workbook workbook = new Workbook();
workbook.Open(templatePath);
2、获取模版的单元
Cells cells= workbook.Worksheets[0].Cells;
3、对不同的行的单元格复制
cells[0, 0].PutValue("我是第一行第一列,也即是第一行第一个单元格");
说一下合并单元格,这个没捷径可走,只能提供什么意思,具体业务具体去合并
//合并单元格cells.Merge(1, 0, 3, 1) 参数1代表当前行,参数0代表当前行当前列即第一行第一列,参数3合并的行数,参数4合并的列数
cells.Merge(1, 0, 3, 1);
设置单元格的样式
cells[startmergepos, 1].SetStyle(new Style() { HorizontalAlignment = TextAlignmentType.Center });
设置单元格的高度
//cells.SetRowHeight(row + i, 200);
看一下网上其他例子:

代码实现:

大概意思就是模版定义好model对应的名称,
读取模版后,把model赋值给模版数据源,类似dataview,就是字段对应上
说话一下模版定义变量方式:&=data.ProductName,放在你要填充的单元格内
这个有必要提一下,怎么获取模版实际用到的列数呢,比如你表头设置了10个字段,获取的是10个,而不是整个表格的
cells.MaxDataColumn,这个可以做到
Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行的更多相关文章
- ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作
1. 使用NPOI读取及生成excel表. (1)导出Click事件: 获取DataTable; 给文件加文件名: string xlsxName = "xxx_" + DateT ...
- js动态加载数据并合并单元格
js动态加载数据合并单元格, 代码如下所示,可复制直接运行: <!DOCTYPE HTML> <html lang="en-US"> <head> ...
- 基于C#语言MVC框架Aspose.Cells控件导出Excel表数据
控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "xx" ...
- [办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?
合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本 ...
- 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容
在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...
- 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)
一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...
- layui:数据表格如何合并单元格
layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 合并单元格
jQuery EasyUI 数据网格 - 合并单元格 数据网格(datagrid)经常需要合并一些单元格.本教程将向您展示如何在数据网格(datagrid)中合并单元格. 为了合并数据网格(datag ...
- .Net用字符串拼接实现表格数据相同时合并单元格
前言 最近在做项目通过GridView或Repeater绑定数据,如果两行或若干行某列值相同,需要进行合并单元格,但是实现过程中想到了字符串拼接,于是就没用绑定数据控件,而是用了html结合字符串实现 ...
随机推荐
- Windows Store App 图像
在Windows应用商店应用中可以使用两种方法来显示图片,这两种方法分别为使用Image对象和使用ImageBrush对象.Image对象可以直接呈现一幅图像,而ImageBrush对象则可以用一幅图 ...
- PDF 补丁丁 0.5.0.1816 测试版发布:新界面新体验
新的测试版简化了界面,操作更直观,同时修复了旧版本的一些错误. 欢迎各位下载测试文件试用,并提出宝贵意见.
- UIDatePicker和UIToolbar的使用
功能,用UIDatePicker 和UIToolbar 实现点击文本框弹出日期选择空间. 点击确定按钮获取时间显示到对应的Text Field里面,点击取消按钮隐藏键盘. 1.创建textField控 ...
- hibernate入门实例
1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...
- Android之NDK开发(转)
Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...
- web安全学习笔记
论坛&资讯 http://www.metasploit.cn http://www.freebuf.com http://www.backtrack.org.cn/ http://www.ha ...
- Request和response的用法总结
Request 个我总结:只要记住 只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头.请求方法.请求参数.使用者IP等等信息. 3.什么情况下为响应?什么情况下为请求? 简单一句话,请求 ...
- 开启关闭keditor 过滤
filterMode: false, K.create('#txt_content', { uploadJson: '/js/kindeditor-4.1.10/upload_json.ashx', ...
- 3、jvm内存分配实例
参数:-Xmx20m -Xms20m -XX:NewRatio=1 -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:PermSize=2m 结果: Heap P ...
- 管理分支:git branch
新建分支的意义: 创建一个单独的工作分支,避免对主分支master造成太多的干扰,也方便与他们交流协作. 进行高风险的工作时,创建一个实验性的分支,扔掉一个烂摊子总比收拾一个烂摊子好得多. 合并别人工 ...