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 首次使用,用到模版填充数据,合并单元格,换行的更多相关文章

  1. ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作

    1. 使用NPOI读取及生成excel表. (1)导出Click事件: 获取DataTable; 给文件加文件名: string xlsxName = "xxx_" + DateT ...

  2. js动态加载数据并合并单元格

    js动态加载数据合并单元格, 代码如下所示,可复制直接运行: <!DOCTYPE HTML> <html lang="en-US"> <head> ...

  3. 基于C#语言MVC框架Aspose.Cells控件导出Excel表数据

    控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "xx" ...

  4. [办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?

    合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本 ...

  5. 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容

    在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...

  6. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

  7. layui:数据表格如何合并单元格

    layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...

  8. 雷林鹏分享:jQuery EasyUI 数据网格 - 合并单元格

    jQuery EasyUI 数据网格 - 合并单元格 数据网格(datagrid)经常需要合并一些单元格.本教程将向您展示如何在数据网格(datagrid)中合并单元格. 为了合并数据网格(datag ...

  9. .Net用字符串拼接实现表格数据相同时合并单元格

    前言 最近在做项目通过GridView或Repeater绑定数据,如果两行或若干行某列值相同,需要进行合并单元格,但是实现过程中想到了字符串拼接,于是就没用绑定数据控件,而是用了html结合字符串实现 ...

随机推荐

  1. F2工作流引擎Web层全新扁平化UI上线

    特点:引入Bootstrap开源UI样式和fontawesome图标集 扁平化样式使用界面更舒服,按钮主题可快速定义更换,对于集成到业主系统UI图标更加丰富. 以下截取部分图片展示,更多请联系作者登录 ...

  2. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(五)

    前言 在编写代码的时候,我遇到了很多关于EntityFramework6的疑问,所以现在就提前把这些问题列出来做一下解答,以便在以后的代码编写过程中减少不必要的Bug. EntityFramework ...

  3. 在CentOS 6.7中安装NVIDIA GT730显卡驱动的手记

    主机: Dell OptiPlex 390 MT (i5) 系列: 主机原配独显,型号未知,运转三年半,常有异响,关机之后过一阵再开机,可以解决.最近,风扇的声音实在不正常,重启也无解,判定它挂了.风 ...

  4. 繁星——JQuery选择器之层级

    [ancestor descendant] 在给定元素下匹配所有后代元素.这个选择器的使用概率相当之高,使用示例如下: //HTML代码: <div id='div01'> <inp ...

  5. MSP430FR5739串口程序

    今天急着用这个片子的串口,匆忙中调试串口也话费了一段时间,在网上下了一个程序,忽然就把所有问题搞清楚了,只是中断就看着头文件中寄存器写的,虽然通讯正常,不过不确定有没有写错.代码如下: #includ ...

  6. 获取当前时间UTC时间的下一个15分钟时间点

    ZonedDateTime zdt = ZonedDateTime.now(ZoneOffset.UTC); int now15Minute = zdt.getMinute() / P15MINUTE ...

  7. Maven仓库

    http://search.maven.org/#search%7Cga%7C1%7C

  8. Swift介绍

    Swift介绍 Swift介绍 Swift发布于2014年wwdc大会,是苹果推出的一门编程语言,刚推出的时候主要在os X和iOS平台,今年wwdc大会上,苹果公司宣布今年年底Swift将会开源,开 ...

  9. shell 问题解决

    如果想找常用指令,请点击图片 shell 脚本中的指令,在不确定情况下,不要随意使用nohup,否则也许会造成灾难性后果,比如--内存爆掉 shell 随机函数生成 function random() ...

  10. 005-Scala数组操作实战详解

    005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...