1. 程式人生 > >JXLS 2.4.0系列教程(二)——循環導出一個鏈表的數據

JXLS 2.4.0系列教程(二)——循環導出一個鏈表的數據

教程 super 最簡 com arraylist port 至少 ron mod

請務必先看上一篇文章,本文在上一篇文章的代碼基礎上修改而成。

JXLS 2.4.0系列教程(一)——最簡單的模板導出

上一篇文章我們介紹了JXLS和模板導出最簡單的應用,現在我們要更進一步,介紹在模板中循環導出鏈表中的數據,在日常開發中,循環導出應該才是最常用的功能吧!

首先,我們要建立一個類模擬javabean對象。我們定義一個person類,裏面有idnameage

public class Person {
    String id;
    String name;
    Integer age;
    public Person(String id, String name, Integer age) {
        
super(); this.id = id; this.name = name; this.age = age; } public Person() { } /** 以下省略了對應的get/set方法,請自行補齊 */ }

然後我們修改main 方法,大體上和上一篇文章是一致的,只是模擬了從數據庫取出javabean的過程,將取出的javabean對象仿佛model中,然後傳給JxlsUtils

public class TestMain {
    public static void main(String[] args) throws
Exception { // 模板位置,輸出流 String templatePath = "E:/template2.xls"; OutputStream os = new FileOutputStream("E:/out.xls"); // 一個裝有對象數據的鏈表 List<Person> persons = new ArrayList<Person>(); Person p1 = new Person("001", "張三", 18); Person p2
= new Person("002", "李四", 19); Person p3 = new Person("003", "王五", 20); persons.add(p1); persons.add(p2); persons.add(p3); Map<String, Object> model = new HashMap<String, Object>(); model.put("person", persons); // 把鏈表放進model中 JxlsUtils.exportExcel(templatePath, os, model); os.close(); System.out.println("完成"); } }

接下來我們設計模板:

技術分享

A1單元格(A1C1合並單元格,名字還是A1)中的註釋:jx:area(lastCell="D4"),不用多講劃定模板的區域範圍。依照上文講的避免bug的原因,我們依然將區域範圍設置成比模板內容至少大一圈。需要說明的是註釋必須在左上角的A1中,但是可以在和A1合並後的單元格中。

A3單元格的註釋:jx:each(items="person" var="p" lastCell="C3")

jx:each() 這是一個遍歷註釋,默認向下增加一行。官網寫可以橫向遍歷(增加direction 參數),我沒有試過。

Items= java代碼中傳入的model的鍵值對中取出鍵名為“person”的對象,這個對象可以是集合,一般是鏈表。

Var= 每一條記錄的變量名,命名為p

lastCell= 遍歷數據在模板中最後一個單元格的位置。

然後在遍歷的區域內寫上${ } 表達式,以var中定義的變量名 . 傳進來的對象屬性為構成。

然後保存模板,執行java代碼,就能看到下圖的結果了。

技術分享

我們再來測試下復雜一點的模板呢?

技術分享

遍歷的模板有兩行,而且開頭一列為合並的單元格,遍歷模板第二行為有底紋的單元格,看看整個表格生成後會不會崩掉?我試過幾個模板導出插件,很多都是單行遍歷模板沒問題,一旦出現多行數據和帶有合並的單元格整個模板就會崩掉。

技術分享

沒毛病,完美。

最後說一點:如果lastCell的參數是一個合並後的單元格,你不知道這個合並後的單元格名字是什麽,那就用鼠標點一下該單元格,excel左上角會顯示這個合並單元格的名稱的,就寫這個名字就行。

JXLS 2.4.0系列教程(二)——循環導出一個鏈表的數據