功能概述
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
|
把Excel(XSSFWorkbook)轉換成Html的Table。 |
|
Servlet,跳轉到報表展示頁面 |
|
響應前端AJax請求,查詢Excel報表,轉化為Html-Table格式的報表。 |
程式包 cn.fansunion.excel2html.model
類 |
說明 |
|
表格的列。 |
|
展示介面用到的資料模型。 |
|
表格的行。 |
|
展示Html用的表格,一個表格由多個行組成。 |
|
Html表格模型,封裝了一個Html表格的一些屬性。 |
程式包 cn.fansunion.excel2html.util
類 |
說明 |
|
JSON工具類。 |
|
HTTP響應常用代碼封裝。 |
|
Excel模版載入器。 |
|
屬性讀取器,讀取設定檔屬性。 |
項目設計和實現思路
啟動項目,進入首頁,點選連結,進入報表展示頁。
報表產生流程
// 獲得模版 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和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