zoukankan      html  css  js  c++  java
  • ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)

    功能概述

    Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中。
    Excel的多个Sheet对应页面的多个Tab选项卡。
    转换算法的难点在于,如何处理行列合并,将Excel的行列合并模型转换成Html表格的行列合并模型。

    背景故事

    因实际需要,需要将Excel展现在Web界面中。

    最初,想在网上找开源的东东,结果没有1个是想要的。有的特别复杂,有的只能在Windows平台,需要闭源的dll,最终还是得靠自己。

    人不逼迫自己,真是想偷懒,不能出成果。

    要是不是自己实现一次,根本不能发现和解决一系列问题。

    最重要的经验就是:要努力克服自己的畏难情绪,不能怕麻烦。

     

    CSDN下载地址(免积分)http://download.csdn.net/download/fansunion/6352759

    相关截图

    Excel2HtmlTable效果图

    Excel模版

    项目结构

    下载包内容

    Excel2HtmlTable.zip:项目源码,1个完整的Eclipse项目,直接导入,Tomcat需要7.0。

    Excel2HtmlTable效果图.gif:Excel模版对应的Html表格

    Excel模版.gif:Excel模版内容

    项目结构.gif:项目的结构

    包和类说明

    程序包 cn.fansunion.excel2html

    ExcelToHtmlTable
    把Excel(XSSFWorkbook)转换成Html的Table。
    LoadReportServlet,跳转到报表展示页面
    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),然后点击 主页上的链接 就可以看到 报表了。

    答读者问

    sdsada8小时前
    1楼
    lz难道不知道excel有webapp吗?另外,找个wysiwyg的html编辑器,直接粘贴复制可行吗? 
     
    答:

    项目原来用的是Excel,查看报表,首先需要下载下来。

    现在要求在Web界面中展示。

    Excel里有大量的公式,先把数据从NoSQL数据库填充到Excel,然后让Excel自动计算公式,最后把Excel展现到Web界面中。

      

    原文参见:http://FansUnion.cn/articles/2634

  • 相关阅读:
    初入angularJS [2]
    初入angularJS [1]
    ubuntu13.10 nginx
    Session对象详解[源于网络]
    二、Python变量
    一、计算机硬件及操作系统
    python进阶之装饰器之3如何利用装饰器强制函数上的类型检查
    python基础之闭包函数
    python进阶之装饰器之2.定义一个可接受参数的装饰器、如何定义一个属性可由用户修改的装饰器、定义一个能接受可选参数的装饰器
    python进阶之装饰器之1.如何定义一个基本的装饰器并使用,保留装饰器的元数据(原信息),逆向解得函数原信息
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463569.html
Copyright © 2011-2022 走看看