tiangong-doc tiangong-doc
首页
  • 天宫体系

    • 前端架构
    • 后端架构
    • 扩展功能
    • 打包部署
    • 更新日志
    • 辅助开发平台 (opens new window)
    • 权限平台部署包下载 (opens new window)
  • 基础组件

    • 工作流引擎(待整理)
    • 跨境加签客户端(待整理)
    • 权限平台(待整理)
  • 数字化工具

    • 数字魔方
    • 数据采集
    • 智能导入
    • 数字员工
    • 规则引擎(开发中)
    • 消息引擎(待开发)
    • 智能导出(待开发)
  • 业务算法

    • 南京业务体检(待整理)
    • 智慧长江(待整理)
  • 识别模型

    • 空箱识别(待整理)
    • 智能客服(待整理)
    • OCR识别(待整理)
    • 车牌识别(待整理)
    • 超市停留识别(待整理)
    • 危险品识别(待开发)
    • 超长车识别(待开发)
    • 车辆靠台(待开发)
    • 车辆占用(待开发)
  • 算法模型(待整理)
  • 风控模型(待整理)
  • 海关规则(待整理)
  • 危险品知识(待整理)
  • 组件设计文档(待整理)
  • 数据服务

    • 商品归类服务(待开发)
    • RECP贸易服务(待开发)
    • 商品价格服务(待开发)
    • 业务申报解答(待开发)
    • 报关单状态查询(待开发)
  • 常用开发工具

    • BASE64编解码工具 (opens new window)
    • MD5编码工具 (opens new window)
    • AES/DES加解密 (opens new window)
    • JWT解码工具 (opens new window)
    • ASCII编解码工具 (opens new window)
    • Unicode编解码工具 (opens new window)
    • UTF-8编解码工具 (opens new window)
    • 字符串编解码工具 (opens new window)
    • 通用进制转换工具 (opens new window)
    • 浮点数十进制转换 (opens new window)
    • 在线JSON解析 (opens new window)
    • 在线JS代码格式化工具 (opens new window)
    • CSS可视化工具 (opens new window)
    • XML格式化工具
    • SQL压缩/格式化工具 (opens new window)
    • JSON/XML在线转换 (opens new window)
    • JSON/YAML在线转换 (opens new window)
    • IP地址查询 (opens new window)
    • HTTP在线接口测试 (opens new window)
    • UUID在线生成器 (opens new window)
    • 随机数生成器 (opens new window)
    • 在线文本比对 (opens new window)
  • 研发标准规范(待整理)
  • 国产化适配
首页
  • 天宫体系

    • 前端架构
    • 后端架构
    • 扩展功能
    • 打包部署
    • 更新日志
    • 辅助开发平台 (opens new window)
    • 权限平台部署包下载 (opens new window)
  • 基础组件

    • 工作流引擎(待整理)
    • 跨境加签客户端(待整理)
    • 权限平台(待整理)
  • 数字化工具

    • 数字魔方
    • 数据采集
    • 智能导入
    • 数字员工
    • 规则引擎(开发中)
    • 消息引擎(待开发)
    • 智能导出(待开发)
  • 业务算法

    • 南京业务体检(待整理)
    • 智慧长江(待整理)
  • 识别模型

    • 空箱识别(待整理)
    • 智能客服(待整理)
    • OCR识别(待整理)
    • 车牌识别(待整理)
    • 超市停留识别(待整理)
    • 危险品识别(待开发)
    • 超长车识别(待开发)
    • 车辆靠台(待开发)
    • 车辆占用(待开发)
  • 算法模型(待整理)
  • 风控模型(待整理)
  • 海关规则(待整理)
  • 危险品知识(待整理)
  • 组件设计文档(待整理)
  • 数据服务

    • 商品归类服务(待开发)
    • RECP贸易服务(待开发)
    • 商品价格服务(待开发)
    • 业务申报解答(待开发)
    • 报关单状态查询(待开发)
  • 常用开发工具

    • BASE64编解码工具 (opens new window)
    • MD5编码工具 (opens new window)
    • AES/DES加解密 (opens new window)
    • JWT解码工具 (opens new window)
    • ASCII编解码工具 (opens new window)
    • Unicode编解码工具 (opens new window)
    • UTF-8编解码工具 (opens new window)
    • 字符串编解码工具 (opens new window)
    • 通用进制转换工具 (opens new window)
    • 浮点数十进制转换 (opens new window)
    • 在线JSON解析 (opens new window)
    • 在线JS代码格式化工具 (opens new window)
    • CSS可视化工具 (opens new window)
    • XML格式化工具
    • SQL压缩/格式化工具 (opens new window)
    • JSON/XML在线转换 (opens new window)
    • JSON/YAML在线转换 (opens new window)
    • IP地址查询 (opens new window)
    • HTTP在线接口测试 (opens new window)
    • UUID在线生成器 (opens new window)
    • 随机数生成器 (opens new window)
    • 在线文本比对 (opens new window)
  • 研发标准规范(待整理)
  • 国产化适配
  • EciReport导出
2024-09-09
目录

EciReport模板导出

# 功能介绍

 基于模板导出Excel的功能
1

# 功能使用

有两个类一个是EciReport,另一个是EciReport2007。
区别:
EciReport的模板是 xxx.xls的
EciReport2007的模板是 xxx.xlsx
两个类的属性都是一样的,使用方法也是一样的,主要是根据模板来选择。
1
2
3
4
5

# EciReport类的属性

属性 说明 类型 默认值
Pwd 密码 string
BookPwd 密码 string
PDF 是否转PDF bool false
Rar 是否是压缩包 bool false
PDFView 预览PDF bool false
AutoHeight 自适应高度 bool false
StartRowIndex 数据开始行(第一行索引是1,不是0) int 1
HeightParam int 80
EndRowIndex 自动高度数据结束行索引 int 0
AutoToExcel 导出完毕后自动输出到Excel中 bool true
ForceFormulaRecalculation 重新计算公式 bool false
Name 报表名称 string
Type 报表类型 string
TemplateFile 模板文件 string
DataSource 数据源 DataSet
ReportParam 参数 EntityBase
ListDetail 明细处理配置 List:EciReportDetail
TargetFileName 目标文件名 string
multiSheet 是否是多sheet bool

# EciReport类的方法

事件名称 说明 参数
OnBeforeOutput 输出之前用户自定义事件
EciReport 构造函数
AddDataTable 追加数据表 DataTable
AddDataTable 追加数据表 DataTable,tableName
Execute 执行导出第一页Sheet【EXCEL报表】
ExecuteSheet 导出指定索引的Sheet sheet索引:inputSheetIndex,table名称:headTableName
PrintLandscape 设置水平打印 landscape(true:横向打印,false:纵向打印),pagerSize
ToExcel 导出Excel

# EciReportDetail 类的属性

属性 说明 类型 默认值
Name 数据源的名称 string
StartRowIndex 起始行,注意:第一行的索引是1,不是0 int
RowSpan 多少行为一条数据 int 1
RowIndex 模板行 int
TableIndex word导出模板专用 int 0
listPics 图片列表

# 快递面单(条码)

# 模板设置的内容属性

属性 说明 类型
CMD 命令符(固定值:BARCODE) string
type 类型(可选值:Code39,Code128A,Code128B,Code128C,QR) string
top 设置条码距到顶部的距离 string
left 设置条码到左边的距离 string
ColSpan 列 string
RowSpan 行 string
resize 生成的条码的图片的大小;默认比例:(0.98, 0.90) string
showCode 是否显示编码(显示:"1") string
Data 数据源 string

# 示例

# 模板示例

![[demo_01_模板.jpg]]

# 代码示例
EciReport npoi = new EciReport();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\快递面单YT.xls";

DataTable dataHead = DataTableHelper.Create("运单号", 1).DataTable;
dataHead.TableName = "HEAD";

dataHead.Rows[0]["运单号"] = "123456789";

npoi.AddDataTable(dataHead);

npoi.Execute();
1
2
3
4
5
6
7
8
9
10
11
# 导出结果

![[demo_01_结果.png]]

# 主表

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
1

# 示例

# 模板示例

![[demo_02_模板.png]]

# 代码示例EciReport
EciReport npoi = new EciReport();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\主表.xls";

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

DataTable dataHead = DataTableHelper.Create("用户名,订单号", 1).DataTable;
dataHead.TableName = "HEAD";
dataHead.Rows[0]["用户名"] = "系统管理员1";
dataHead.Rows[0]["订单号"] = "123456789";

dataset.Merge(dataHead);

//自动导出Excel
npoi.AutoToExcel = true;

npoi.Execute();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 导出结果

![[demo_02_结果.png]]

# 主从

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
1
2

# 示例

# 模板示例

![[demo_03_模板.png]]

# 代码示例1
EciReport npoi = new EciReport();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\主从.xls";

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

//StartRowIndex:设置明细行的开始索引,从1开始
npoi.ListDetail.Add(new EciReportDetail() { StartRowIndex = 9, Name = "ROLE" });

DataTable dataRole = DataTableHelper.Create("NAME,CREATE_DATE,ZONE,NO,NAME_LINK,ZONE_LINK", 5).AddNumColumn("年龄").DataTable;
dataRole.TableName = "ROLE";

int index = 1;
foreach (DataRow row in dataRole.Rows)
{
	row["NO"] = "45666" + index++;
	row["NAME_LINK"] = "http://baidu.com";//测试超链接
	row["ZONE_LINK"] = "http://oa.ecidh.com:8010/oa/";
}

DataTable dataHead = DataTableHelper.Create("用户名,备注,订单号", 1).DataTable;
dataHead.TableName = "HEAD";
dataHead.Rows[0]["用户名"] = this.txtUserName.Text;
dataHead.Rows[0]["订单号"] = "123213213213";

npoi.DataSource.Merge(dataHead);
npoi.DataSource.Merge(dataRole);

npoi.Execute();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 代码示例2

![[config.png]]

通过模板设置StartRowIndex,明细表格名称;
如下:在模板中添加一个“config”的sheet
{List:[{Name:"ROLE",Row:5}]}

等价于代码:npoi.ListDetail.Add(new EciReportDetail() { StartRowIndex = 5, Name = "ROLE" });

1
2
3
4
5
6
# 导出结果

![[demo_03_结果.png]]

# 主从(合并单元格)

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称

设置:MERGER列设置需要合并的列名称
COMPANYNAME:133:合并垂直低端水平靠右对齐
第一个数字:1.合并,2.清除
第二个数字垂直方向:1顶端对齐 2居中对齐  3底端对齐
第二个数字水平方向:1左对齐  2居中对齐  3右对齐

NODENAME:121:合并居中靠左对齐
第一个数字:1.合并,2.清除
第二个数字垂直方向:1顶端对齐 2居中对齐  3底端对齐
第二个数字水平方向:1左对齐  2居中对齐  3右对齐
1
2
3
4
5
6
7
8
9
10
11
12
13

# 示例

# 模板示例

![[demo_04_模板.png]]

# 代码示例
DataSet ds = new DataSet();

ds.ReadXml(Server.MapPath("~") + @"\AppDemo\NPOI\Xml\Data.xml");

DataTable data = ds.Tables[0];

data.Columns.Add("MERGER");

data.Rows[0]["MERGER"] = "COMPANYNAME:133,NODENAME:121";

EciReport report = new EciReport();
report.TemplateFile = Server.MapPath("~") + @"\AppDemo\NPOI\Excel\用户角色.xls";

report.AddDataTable(data, "DATA");
report.ListDetail.Add(new EciReportDetail() { Name = "DATA", StartRowIndex = 2 });
report.Execute();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 导出结果

![[demo_04_结果.png]]

# 仅导出明细

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
1
2

# 示例

# 模板示例

![[demo_05_模板.png]]

# 代码示例
EciReport2007 npoi = new EciReport2007();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel2007\\明细.xlsx";

npoi.ListDetail.Add(new EciReportDetail() { StartRowIndex = 3, Name = "ROLE" });

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

DataTable dataRole = DataTableHelper.Create("NAME,CREATE_DATE", 5).DataTable;
dataRole.TableName = "ROLE";

dataset.Merge(dataRole);

npoi.Execute();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 导出结果

![[demo_05_结果.png]]

# 导出主从(分组)

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
在明细表中,通过K列,来进行分组
1
2
3

# 示例

# 模板示例

在明细表中,添加K列,设置相同的值,代表是一组的 ![[demo_06_模板.png]]

# 代码示例
EciReport2007 npoi = new EciReport2007();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel2007\\主从-分组.xlsx";

npoi.ListDetail.Add(new EciReportDetail() { StartRowIndex = 5, Name = "ROLE" });

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

DataTable dataHead = DataTableHelper.Create("K,用户名,SHEET_NAME", 3).DataTable;
dataHead.TableName = "HEAD";
dataHead.Rows[0]["SHEET_NAME"] = dataHead.Rows[0]["用户名"].ToString();
dataHead.Rows[1]["SHEET_NAME"] = dataHead.Rows[1]["用户名"].ToString();
dataHead.Rows[2]["SHEET_NAME"] = "";

DataTable dataRole = DataTableHelper.Create("K,NAME,CREATE_DATE", 8).DataTable;
dataRole.TableName = "ROLE";

dataRole.Rows[0]["K"] = "K1";
dataRole.Rows[1]["K"] = "K1";
dataRole.Rows[2]["K"] = "K2";
dataRole.Rows[3]["K"] = "K2";
dataRole.Rows[4]["K"] = "K2";
dataRole.Rows[5]["K"] = "K2";
dataRole.Rows[6]["K"] = "K3";
dataRole.Rows[7]["K"] = "K4";

dataset.Merge(dataRole);
dataset.Merge(dataHead);

npoi.Execute();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 导出结果

分不同的sheet显示结果 ![[demo_06_结果1.png]] ![[demo_06_结果2.png]] ![[demo_06_结果3.png]]

# 多模板,多sheet导出

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
要执行多次:ExecuteSheet,指定sheet执行导出
1
2
3

# 示例

# 模板示例

![[demo_07_模板_1.png]] ![[demo_07_模板_2.png]]

# 代码示例
EciReport npoi = new EciReport();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\多表.xls";
DataTable dataHead = DataTableHelper.Create("CODE,NAME", 1).DataTable;
dataHead.TableName = "HEAD";
DataTable dataA = DataTableHelper.Create("CODE,NAME", 2).DataTable;
dataA.TableName = "A";
DataTable dataB = DataTableHelper.Create("CODE,NAME", 5).DataTable;
dataB.TableName = "B";

npoi.AddDataTable(dataHead);
npoi.AddDataTable(dataA);
npoi.AddDataTable(dataB);

npoi.AutoToExcel = false;
npoi.ListDetail = new List<EciReportDetail>() { new EciReportDetail() { Name = "A", StartRowIndex = 2 } };
npoi.Execute();

npoi.ListDetail = new List<EciReportDetail>() { new EciReportDetail() { Name = "B", StartRowIndex = 2 } };
npoi.ExecuteSheet(1, string.Empty);

npoi.ToExcel();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 导出结果

![[demo_07_结果_1.png]] ![[demo_07_结果_2.png]]

# Excel导出到Table添加超链接

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
添加超链接:添加列:columnName_LINK,
1
2
3

# 示例

# 模板示例

在代码中,给明细表的字段添加超链接: 给字段NAME添加,就是在表格中添加列NAME_LINK,设置url地址。 ![[demo_08_模板.png]]

# 代码示例
EciReport npoi = new EciReport();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\超链接.xls";

npoi.ListDetail.Add(new EciReportDetail() { StartRowIndex = 3, Name = "ROLE" });

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

DataTable dataRole = DataTableHelper.Create("NAME,CREATE_DATE,ZONE,NO,NAME_LINK,ZONE_LINK", 5).AddNumColumn("年龄").DataTable;
dataRole.TableName = "ROLE";

int index = 1;
foreach (DataRow row in dataRole.Rows)
{
	row["NO"] = "45666" + index++;
	row["NAME_LINK"] = "http://baidu.com";//测试超链接
	row["ZONE_LINK"] = "http://oa.ecidh.com:8010/oa/";//测试超链接
}

dataRole.Rows[1]["年龄"] = "1";

DataTable dataHead = DataTableHelper.Create("用户名,备注,订单号", 1).DataTable;
dataHead.TableName = "HEAD";
dataHead.Rows[0]["用户名"] = "xxxxx";
dataHead.Rows[0]["订单号"] = "123213213213";

npoi.DataSource.Merge(dataHead);
npoi.DataSource.Merge(dataRole);

npoi.Execute();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 导出结果

![[demo_08_结果.png]]

# 导出2003自动换行设置

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
设置属性:AutoHeight
1
2
3

# 示例

# 模板示例

![[demo_09_模板.png]]

# 代码示例
EciReport npoi = new EciReport();
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\明细.xls";

npoi.ListDetail.Add(new EciReportDetail() { StartRowIndex = 3, Name = "ROLE" });

npoi.AutoHeight = true;
npoi.StartRowIndex = 2;
npoi.EndRowIndex = 8;

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

DataTable dataRole = DataTableHelper.Create("NAME,CREATE_DATE", 5).DataTable;
int i = 0;
foreach (DataRow dr in dataRole.Rows)
{
	if (i % 2 == 0)
	{
		dr["CREATE_DATE"] = "创建时new的对象不一样,2.生成的文件后缀不一样,3.创建时加的前缀不一样(也可以不用加前缀,直接使用接口的方式创建)" + i;
	}
	i++;
}
dataRole.TableName = "ROLE";

dataset.Merge(dataRole);

npoi.Execute();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 导出结果

![[demo_09_结果.png]]

# 导出设置偏移量

主表字段使用的 $ 开始 ,后面拼接表格列的字段名称
明细字段使用:#  开始 ,后面拼接表格列的字段名称
在模板中设置 $字段 % 5:向左偏移5个单元格;
1
2
3

# 示例

# 模板示例

向左偏移5个单元格:从H列偏移到C列; ![[demo_10_模板.png]]

# 代码示例
EciReport npoi = new EciReport();
npoi.PDF = this.chkPDFView.Checked;
npoi.TemplateFile = Server.MapPath("~") + "\\AppDemo\\NPOI\\Excel\\主表.xls";

DataSet dataset = new DataSet();
npoi.DataSource = dataset;

DataTable dataHead = DataTableHelper.Create("用户名,订单号", 1).DataTable;
dataHead.TableName = "HEAD";
dataHead.Rows[0]["用户名"] = this.txtUserName.Text;
dataHead.Rows[0]["订单号"] = "123456789";

dataset.Merge(dataHead);

npoi.Execute();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 导出结果

![[demo_10_结果.png]]

最近更新
01
EciReport模板导出_Core
09-10
02
Core权限平台接口
07-25
03
Java权限平台接口
07-25
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式