ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)
功能概述
Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中。
Excel的多个Sheet对应页面的多个Tab选项卡。
转换算法的难点在于,如何处理行列合并,将Excel的行列合并模型转换成Html表格的行列合并模型。
背景故事
因实际需要,需要将Excel展现在Web界面中。
最初,想在网上找开源的东东,结果没有1个是想要的。有的特别复杂,有的只能在Windows平台,需要闭源的dll,最终还是得靠自己。
人不逼迫自己,真是想偷懒,不能出成果。
要是不是自己实现一次,根本不能发现和解决一系列问题。
最重要的经验就是:要努力克服自己的畏难情绪,不能怕麻烦。
CSDN下载地址(免积分):http://download.csdn.net/download/fansunion/6352759
相关截图



下载包内容
Excel2HtmlTable.zip:项目源码,1个完整的Eclipse项目,直接导入,Tomcat需要7.0。
Excel2HtmlTable效果图.gif:Excel模版对应的Html表格
Excel模版.gif:Excel模版内容
项目结构.gif:项目的结构
包和类说明
程序包 cn.fansunion.excel2html
| ExcelToHtmlTable |
把Excel(XSSFWorkbook)转换成Html的Table。
|
| LoadReport | Servlet,跳转到报表展示页面 |
| QueryReport |
响应前端AJax请求,查询Excel报表,转化为Html-Table格式的报表。
|
程序包 cn.fansunion.excel2html.model
| 类 | 说明 |
|---|---|
| Col |
表格的列。
|
| DisplayDataModel |
展示界面用到的数据模型。
|
| Row |
表格的行。
|
| Table |
展示Html用的表格,一个表格由多个行组成。
|
| TableModel |
Html表格模型,封装了一个Html表格的一些属性。
|
程序包 cn.fansunion.excel2html.util
| 类 | 说明 |
|---|---|
| JsonUtils |
JSON工具类。
|
| ResponseUtils |
HTTP响应常用代码封装。
|
| TemplateLoader |
Excel模版加载器。
|
| TemplatePropertyReader |
属性读取器,读取配置文件属性。
|
项目设计和实现思路
启动项目,进入主页,点击链接,进入报表展示页。
报表生成流程
// 获得模版
XSSFWorkbook dataWorkbook = getTemplateWorkbook(); // 构造展示模型数据
List<TableModel> tableModelList = buildTableModelList(dataWorkbook); //构造最终展示需要的数据模型
DisplayDataModel model = new DisplayDataModel();
model.setTableModelList(tableModelList); //构造和发送JSON格式的数据
String beanToJSON = JsonUtils.beanToJSON(model);
ResponseUtils.setResponseHeaders(response);
ResponseUtils.sendJSONData(response, beanToJSON); // 获得Excel模版
private XSSFWorkbook getTemplateWorkbook() throws FileNotFoundException,
IOException, InvalidFormatException {
XSSFWorkbook workbook = TemplateLoader.buildSimpleWorkbook();
return workbook;
} // 构造数据模型,在界面展示
private List<TableModel> buildTableModelList(XSSFWorkbook dataWorkbook) {
ExcelToHtmlTable excelToHtmlTable = new ExcelToHtmlTable(dataWorkbook);
//init方法的思路,就是遍历Excel的每一个sheet、每一行、每一列,根据Excel的行列合并结构生成Html对应的行列合并结构
excelToHtmlTable.init();
List<TableModel> tableModelList = excelToHtmlTable.getTableModelList();
return tableModelList;
}
更多信息请参考项目源码。
特别说明
如果没有详细的注释,代码很难维护的。
主要是很多代码是处理Excel单元格的null和空字符串等,每一种数据类型,每一种情况,都需要很好地处理。
测试的时候,需要很多种不同风格内容的Excel。
另外,这个项目是我花了4个小时的时间,单独从项目中抽取出来的,有些地方的命名可能有点奇怪。
如果想完全理解这个算法,除了自己认真研究源码外,没有其它的方法,不要指望作者本人一点点地讲解清晰。
下一步计划
将这个算法,封装成为一个单独的Jar包。
今后,如果有需要,直接加入jar包,调用API就好了。
一个开发人员在实践中,一定要逐步积累可复用的方法、类、组件,如果每次都重新编码,实现重复的功能,只能当码农。
如何运行本程序
上次写了Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
http://blog.csdn.net/fansunion/article/details/12215233
有同学遇到了问题,有的不知道怎么运行,所以这次需要说明一下。
这个项目的源码是一个 Eclipse项目,需要导入到Eclipse的工作空间中。
添加Server,Tomcat7,启动后,访问主页(默认是index.jsp),然后点击 主页上的链接 就可以看到 报表了。
答读者问
项目原来用的是Excel,查看报表,首先需要下载下来。
现在要求在Web界面中展示。
Excel里有大量的公式,先把数据从NoSQL数据库填充到Excel,然后让Excel自动计算公式,最后把Excel展现到Web界面中。
原文参见:http://FansUnion.cn/articles/2634
ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)的更多相关文章
- 【JAVA-JDT-AST】Java抽象语法树的构建、遍历及转成dot格式(附Github源码)
Background: 最近为了重现tree-based clone detection的论文:L. Jiang, G. Misherghi, Z. Su, and S. Glondu. Deckar ...
- Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)
功能说明 输入文件路径,在浏览器输出文件预览信息,经测试极速(Chrome).IE9.Firefox通过 分类文件及代码说明 DemoFiles 存放可测试文件 Default.aspx 启动页 ...
- 机器学习:IB1算法的weka源码详细解析(1NN)
机器学习的1NN最近邻算法,在weka里叫IB1,是因为Instance Base 1 ,也就是只基于一个最近邻的实例的惰性学习算法. 下面总结一下,weka中对IB1源码的学习总结. 首先需要把 ...
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
- Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)
Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载) 说明:订单抽成指的是向卖家收取相应的信息服务费.(目前市场上有两种抽成方式,一种是按照总额的抽成比率,另外一种是按照订单明细的抽成比率 ...
- 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解
原文地址:http://docode.top/Article/Detail/10003 目录: 1..Net(C#)平台下Des加密解密源代码 2..Net(C#)平台下Aes加密解密源代码 3..N ...
- 【PHP版】火星坐标系 (GCJ-02) 与百度坐标系 (BD-09ll)转换算法
首先感谢java版作者@宋宋宋伟,java版我是看http://blog.csdn.net/coolypf/article/details/8569813 然后根据java代码修改成了php代码. & ...
- HttpRunner3源码阅读:4. loader项目路径加载,用例文件转换、方法字典生成
loader.py 这个文件中主要是对yaml,json用例加载转换成用例处理, 预置函数加载成方法字典,路径加载等 可用资料 [importlib]. https://docs.python.org ...
- XAF Excel数据导入模块使用说明与源码
我实现了XAF项目中Excel数据的导入,使用Devexpress 新出的spreadsheet控件,可能也不新了吧:D 好,先看一下效果图:下图是Web版本的. 下面是win版: 功能说明: 支持从 ...
随机推荐
- EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
使用EasyUI时,有个经常遇到的问题,页面还没有渲染完成的时候,就展现了. 刚刚开始很混乱,等加载完成后,就好了. 参考这篇文章http://blog.csdn.net/zheng0518/arti ...
- google浏览器中 查看记住的账号和密码
对于一个有“健忘症”的人来说,密码形同虚设..设置了就忘记,每次登陆都要重新设置密码... 然后,无意中发现,谷歌浏览器点过一次记住密码后,竟然可以明文查看账号和密码!! 步骤: 1.打开谷歌浏览器, ...
- Mybatis-Plus的BaseMapper的使用
Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段. 下面简单举例,调用Base ...
- Python Study (01) 之 特殊方法
Python深入:特殊方法和多范式 Python是一切皆对象,意思就是python的天生就是个"纯面向对象语言"呀. 但是!!! Python还是一个多范式语言(multi-par ...
- EF Code First:实体映射,数据迁移,重构
经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这 ...
- Android开发之使用BroadcastReceiver实现开机自己主动启动(源码分享)
上一节已经介绍过BroadcastReceiver实现实时监听电量的功能,这节就来介绍一下假设实现开机自己主动启动的功能.这个比监听电量还简单不少 (1)在清单文件注冊权限 <uses-perm ...
- 关于 xftp 上传文件时,仅仅是上传了0字节的问题
有两次,上传的时候出现了问题.能上传.可是上传过去的文件都是0字节.查看了各种配置,都是正常的:百思不得解: 后来想起近期在linuxserver运行apt-get update时,中间曾失败过,于是 ...
- BestCoder Round #75 King's Order dp:数位dp
King's Order Accepts: 381 Submissions: 1361 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- HTML5开发移动web应用——Sencha Touch篇(8)
DataView是Sencha Touch中最重要的组件,用于数据的可视化.数据可视化的重要性不言而喻,能够讲不论什么数据以形象的方式展示给用户. 眼下,怎样更好地可视化是很多公司或框架都在追求的. ...
- 2015 Multi-University Training Contest 2 1006 Friends 壮压
题目链接 题意:t 组測试数据,每组測试数据有 n个人,m条关系 每条关系能够是 "线上关系" 或者 "线下关系". 要求每一个人的线上关系(条数) == 线下 ...