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. canvas绘图

    1.//获取canvas容器var can = document.getElementById('canvas');//创建一个画布var ctx = can.getContext('2d');2.绘 ...

  2. JS对数字进行货币格式化并且保留两位小数点,小数用0补全

    /** * 将数值四舍五入(保留2位小数)后格式化成金额形式 * * @param num 数值(Number或者String) * @return 金额格式的字符串,如'1,234,567.45' ...

  3. Leetcode 详解(股票交易日)(动态规划DP)

    问题描述: 在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行).给出一天中的股票变化序列,请写一个程序计算一天可以获得 ...

  4. WCF传输大数据的设置

    在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于 ...

  5. php上传文件类型

    下面提供一张IE和火狐浏览器的文件类型对照表: ie 火狐 id 后缀名 php识别出的文件类型 0 gif image/gif 1 jpg image/jpeg 2 png image/png 3 ...

  6. [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)

    Java针对类.成员变量.方法,有很多修饰符,例如public.private.static.final.synchronized.abstract等,这些修饰符用来控制访问权限或其他特性. 本文就用 ...

  7. Html标签第一课

    <p>段落标签</p> <h1>字体标签,1到6,越来越小</h1>.....<h6></h6><h>标签自动换行 ...

  8. 关于SqlHelper

    在 SqlHelper 类中实现的方法包括:   ExecuteNonQuery.此方法用于执行不返回任何行或值的命令.这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数.   Exec ...

  9. xcode中得一个坑

    因项目需求变动,我必须在coredata中的WorkLogModel表中添加一个字段:抄送人.起初我给这个字段起名为copyPerson,一切准备就绪后,发现从数据库读取这个copyPerson时,第 ...

  10. SharePoint SC "Audit Settings"功能与CSOM的对应

    博客地址:http://blog.csdn.net/FoxDave SharePoint网站集中有个关于审计的功能:"Site collection audit settings&quo ...