导航

目   录:基于NPOI的报表引擎——ExcelReport

下一篇:ExcelReport源码解析

概述

本篇将通过导出学生成绩的示例演示“使用ExcelReport导出Excel”的步骤。

示例(导出学生成绩明细)

步骤一:设计Excel模板

首先,使用Excel软件设计模板(我没有安装MSOffice,用LibreOffice Calc做的演示)。在模板中要填充数据的位置用$[ParameterName]代替。

步骤二:生成模板填充规则文件

使用模板填充规则文件生成工具(ERTool)为步骤一设计的Excel模板生成填充规则文件。

步骤三:为模板填充数据

实现代码(导出到本地):

//实例化一个参数容器,并加载模板填充规则文件

ParameterCollection collection = new ParameterCollection();

collection.Load(@"Template\Template.xml");

 

//实例化一个元素格式化器列表

List<ElementFormatter> formatters = new List<ElementFormatter>();

formatters.Add(new CellFormatter(collection["GradeDetail", "Dept"], "某某学院"));   //添加一个单元格格式化器

formatters.Add(new CellFormatter(collection["GradeDetail", "Class"], "某某班级"));

formatters.Add(new CellFormatter(collection["GradeDetail", "StudNo"], "2009*****"));

formatters.Add(new CellFormatter(collection["GradeDetail", "StudName"], "韩兆新"));

formatters.Add(new CellFormatter(collection["GradeDetail", "ExportDate"], DateTime.Now));

 

List<GradeInfo> gradeInfoList = new List<GradeInfo>();

gradeInfoList.Add(new GradeInfo() { CGPA = 18, CourseID = "KC-0001", CourseName = "高等数学", CourseType = "理论课", Credit = 6, EvaluationMode = "考试", GainCredit = 6, GPA = 3, Grade = 86, StudyNature = "初修", Type = "必修课" });

gradeInfoList.Add(new GradeInfo() { CGPA = 2, CourseID = "KC-0002", CourseName = "计算机应用基础", CourseType = "理论课", Credit = 2, EvaluationMode = "考试", GainCredit = 2, GPA = 1, Grade = 93, StudyNature = "初修", Type = "必修课" });

gradeInfoList.Add(new GradeInfo() { CGPA = 9, CourseID = "KC-0003", CourseName = "C程序设计", CourseType = "理论课", Credit = 3, EvaluationMode = "考试", GainCredit = 3, GPA = 3, Grade = 97, StudyNature = "初修", Type = "必修课", Remark = "备注信息" });

 

//添加一个Table格式化器

formatters.Add(new TableFormatter<GradeInfo>(collection["GradeDetail", "CourseID"].X, gradeInfoList,

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CGPA"].Y, t => t.CGPA),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CourseID"].Y, t => t.CourseID),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CourseName"].Y, t => t.CourseName),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CourseType"].Y, t => t.CourseType),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Credit"].Y, t => t.Credit),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "EvaluationMode"].Y, t => t.EvaluationMode),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "GainCredit"].Y, t => t.GainCredit),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "GPA"].Y, t => t.GPA),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Grade"].Y, t => t.Grade),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Remark"].Y, t => t.Remark),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "StudyNature"].Y, t => t.StudyNature),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Type"].Y, t => t.Type)

    ));

//导出文件到本地

Export.ExportToLocal(@"Template\Template.xls", saveFileDlg.FileName,

    new SheetFormatterContainer("GradeDetail", formatters));

实现代码(导出到Web):

//实例化一个参数容器,并加载模板填充规则文件

ExcelReport.ParameterCollection collection = new ExcelReport.ParameterCollection();

collection.Load(Server.MapPath(@"Template\Template.xml"));

 

//实例化一个元素格式化器列表

List<ElementFormatter> formatters = new List<ElementFormatter>();

formatters.Add(new CellFormatter(collection["GradeDetail", "Dept"], "某某学院"));   //添加一个单元格格式化器

formatters.Add(new CellFormatter(collection["GradeDetail", "Class"], "某某班级"));

formatters.Add(new CellFormatter(collection["GradeDetail", "StudNo"], "2009*****"));

formatters.Add(new CellFormatter(collection["GradeDetail", "StudName"], "韩兆新"));

formatters.Add(new CellFormatter(collection["GradeDetail", "ExportDate"], DateTime.Now));

 

List<GradeInfo> gradeInfoList = new List<GradeInfo>();

gradeInfoList.Add(new GradeInfo() { CGPA = 18, CourseID = "KC-0001", CourseName = "高等数学", CourseType = "理论课", Credit = 6, EvaluationMode = "考试", GainCredit = 6, GPA = 3, Grade = 86, StudyNature = "初修", Type = "必修课" });

gradeInfoList.Add(new GradeInfo() { CGPA = 2, CourseID = "KC-0002", CourseName = "计算机应用基础", CourseType = "理论课", Credit = 2, EvaluationMode = "考试", GainCredit = 2, GPA = 1, Grade = 93, StudyNature = "初修", Type = "必修课" });

gradeInfoList.Add(new GradeInfo() { CGPA = 9, CourseID = "KC-0003", CourseName = "C程序设计", CourseType = "理论课", Credit = 3, EvaluationMode = "考试", GainCredit = 3, GPA = 3, Grade = 97, StudyNature = "初修", Type = "必修课", Remark = "备注信息" });

 

//添加一个Table格式化器

formatters.Add(new TableFormatter<GradeInfo>(collection["GradeDetail", "CourseID"].X, gradeInfoList,

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CGPA"].Y, t => t.CGPA),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CourseID"].Y, t => t.CourseID),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CourseName"].Y, t => t.CourseName),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "CourseType"].Y, t => t.CourseType),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Credit"].Y, t => t.Credit),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "EvaluationMode"].Y, t => t.EvaluationMode),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "GainCredit"].Y, t => t.GainCredit),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "GPA"].Y, t => t.GPA),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Grade"].Y, t => t.Grade),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Remark"].Y, t => t.Remark),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "StudyNature"].Y, t => t.StudyNature),

    new TableColumnInfo<GradeInfo>(collection["GradeDetail", "Type"].Y, t => t.Type)

    ));

//导出文件到Web

Export.ExportToWeb(Server.MapPath(@"Template\Template.xls"), "GradeDetail",

    new SheetFormatterContainer("GradeDetail", formatters));

导出文件截图:

源码下载:

ExcelReport第一篇:使用ExcelReport导出Excel的更多相关文章

  1. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  2. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)

    自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...

  3. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)

    上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...

  4. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility

    1. ExcelUtility功能:  1.将数据导出到EXCEL(支持XLS,XLSX,支持多种类型模板,支持列宽自适应)  类名:ExcelUtility. Export  2.将EXCEL ...

  5. ExcelReport第二篇:ExcelReport源码解析

    导航 目   录:基于NPOI的报表引擎——ExcelReport 上一篇:使用ExcelReport导出Excel 下一篇:扩展元素格式化器 概述 针对上一篇随笔收到的反馈,在展开对ExcelRep ...

  6. 【第十七篇】easyui-datagrid 导出Excel (在客户端能弹出下载框)

    //导出Excel function exportExcel(obj) { var SaleOrderNo = $("#SaleOrderNo").val().trim(); va ...

  7. NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头

    虽然发表了2篇关于NPOI导出EXCEL的文章,但是最近再次使用的时候,把以前的代码粘贴过来,居然报了一个错误: “服务器无法在发送 HTTP 标头之后追加标头” 后来也查询了很多其他同学的文章,都没 ...

  8. 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)

    最近帅帅的小毛驴遇到一个很奇葩的需求: 导出Excel报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...

  9. 使用POI导出excel进阶篇

    进阶篇就是涉及到合并单元格了.就是某一列相同的单元格需要合并为一个,并分为多个sheet. 效果如图: 直接上代码,需要提供的数据自己搞,传到工具类里面就好. JcExcelVoSuper.java ...

随机推荐

  1. 在django项目外,使用django.db链接数据库(postgres)

    要用python链接到数据库,又不想写太多代码.想到了django,就偷懒了下.用django.db直连. django版本:1.6.5 (1.5以后可以用以下代码) #coding=utf-8 __ ...

  2. OpenMP求完数

    源代码: #include "stdafx.h" //必须写在首行,因为其前面的include都会被忽略 #include "omp.h" #include & ...

  3. 如何查看Git对象

    原文:http://gitbook.liuhui998.com/7_2.html 如果在阅读本文之前,你还不知道git是如何进行存储的,请先阅读<Git是如何存储对象的>. 我们可以使用c ...

  4. 深入理解 Win32 PE 文件格式

    深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什 ...

  5. Unity3d 鼠标拣选小功能集合

    最近在做一些优化工具,把鼠标拣选的功能单独抽出来. 可遍历所有选中的某类型资源,会递归文件夹 可编译所有prefab的某个Component,也是递归的 using UnityEngine; usin ...

  6. ffmpeg-20160728-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  7. Java for LintCode 颠倒整数

    将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数). 解题思路: JAVA实现如下: public int reverseInteger(int n) { Boole ...

  8. 通过syslog接收远程日志

    通过syslog接收远程日志   通过syslog接收远程主机的日志,需要做一些环境配置.   客户机A通过syslog将日志信息发送到服务主机B(或称日志采集服务器).以下说明配置过程(我的实验环境 ...

  9. PyCharm5.0.2最新版破解注册激活码

    下载PyCharm http://download-cf.jetbrains.com/python/pycharm-professional-5.0.2.exe 安装PyCharm 设置激活服务器   ...

  10. Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝

    为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现. 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它).这其实有点像使用 ...