忽然想起來有同窗說過能不能導出圖片,原本我是想說不懂的,後來我上官網查了查,還挺容易。我就簡短的寫一寫怎麼導出圖片。html
官方提供了導出圖片標籤:java
jx:image(lastCell="D10" src="image" imageType="PNG")數組
這是在java中的代碼調用:工具
InputStream imageInputStream = ImageDemo.class.getResourceAsStream("business.png"); byte[] imageBytes = Util.toByteArray(imageInputStream); context.putVar("image", imageBytes);
我把他寫進之前的源碼中,給同窗們看看怎麼導出圖片。spa
還記得之前寫過一個person類嗎?.net
public class Person { String id; String name; Integer age; byte[] img; /** 省略構造器和get/set方法 */ }
咱們加入一個新的屬性byte[] ,byte數組img。excel
而後咱們看看main方法怎麼寫。code
public static void main(String[] args) throws Exception { // 模板位置,輸出流
String templatePath = "E:/template3.xls"; OutputStream os = new FileOutputStream("E:/out4.xls"); // 文件流,輸入一張叫fly的png圖片
InputStream imageInputStream = new FileInputStream("E:/fly.png"); // 使用工具方法把流轉成byte數組
byte[] imageBytes = Util.toByteArray(imageInputStream); // 一個裝有對象數據的鏈表
List<Person> persons = new ArrayList<Person>(); Person p1 = new Person("001", "張三", 18); Person p2 = new Person("002", "李四", 19); Person p3 = new Person("003", "王五", 20); // 把圖片轉換的字節數組存進person對象中
p1.setImg(imageBytes); p2.setImg(imageBytes); p3.setImg(imageBytes); 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("完成"); }
代碼中有個流轉字節數組的工具類Util.toByteArray,這個工具類文章後我會提供下載連接。htm
下面看下導出模板:對象
老生常談的就不說了,說下畫紅框框的:
jx:image(lastCell="D4" src="p.img" imageType="PNG")
這是一個用來導出圖片的標籤,依照官方說明imageType圖片類型默認是PNG,支持:PNG, JPEG, EMF, WMF, PICT, DIB。
src是model中傳入的字節數組byte[]。
lastCell是圖片結束位置,會自動拉伸填充完你定義的格子。好比你在A1中加入了這個註解,lastCell寫C6,就會把A1到C6都拉伸填充完。
行了,執行代碼導出吧。
這裏是把字節數組放在遍歷對象裏的遍歷出來的,你要是不想遍歷,而是隻想顯示一張圖片,你看了這麼多篇我寫的文章,應該不用我說該怎麼作吧?就是直接把字節數組放進model中,在excel中取出就好了。
官方圖片導出簡介:
http://jxls.sourceforge.net/reference/image_command.html#
下載工具類依賴的jar包:commons-codec-1.10.rar
我本來的計劃是寫上五篇JXLS2.4的基礎教程的,如今卻是寫了六篇,花了兩天的時間。目前看來算是寫完了。將來會不會有更新機會要看我能把這個工具用到什麼程度了。這個工具還有不少的功能,我估計都不大可能用得上了!哈哈哈。先這樣吧,寫了兩天,剩下的國慶時間讓我好好的過個國慶!
有什麼意見請在文章後留言,若是你要問我某某某怎麼實現,你就先翻翻我有沒有寫過,若是我沒有寫過,估計我也不懂。
我也不知道有沒有代碼複製下來執行不了的。這麼幾行代碼都有報錯,隨緣吧!