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结合字符串实现 ...
随机推荐
- Mongodb 副本集分片(一)---初始化mongodb安装启动
写在前面:mongodb是nosql非关系型数据库中,比较受欢迎的产品.在数据持久化及与关系型数据库的关联上也做的比较好,目前各大公司在存放二进制文件(图片.视频等)中应用也比较广泛.其遵循的key- ...
- sql数据库表被锁,无法查询
查看被锁表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName ...
- 深入理解iOS开发中的BitCode功能
前言 做iOS开发的朋友们都知道,目前最新的Xcode7,新建项目默认就打开了bitcode设置.而且大部分开发者都被这个突如其来的bitcode功能给坑过导致项目编译失败,而这些因为bitcode而 ...
- hdoj 5139Formula
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5139 展开后的:1!*2!*3!*..*n! 后面就好办了- -
- WebView 的使用----android和html的交互
一.主布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...
- myeclipse 快捷键大全
转自:http://q.cnblogs.com/q/47190/ Technorati 标记: Shortcut keys Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当 ...
- java.lang.Boolean->介绍
介绍: public class Boolean extends Object implements Serializable, Comparable<Boolean> Boolean类是 ...
- windows平台下安装、编译、使用mongodb C++ driver
本博客将记录在Win8.1 ,VS2013环境下编译.配置mongodb C++ driver的流程. 1.下载预备 下载Boost:http://sourceforge.net/projects/b ...
- Command Pattern
当(客户)对象访问(服务)请求服务时,最直接的方法就是方法调用.
- .Net中使用com组件后发生System.ArithmeticException异常的解决办法(Message=算术运算中发生溢出或下溢。)
最近在开发一个.Net程序,其中涉及到对com组件的调用,或者第三方DLL调用, 在调用完以后如果使用一些小的测试程序继续运行,一切正常,但是在使用带有GUI的form程序,或者WPF程序中,继续执行 ...