【轉載】https://blog.csdn.net/u013322876/article/details/72859089
1、介紹
java實現文件的導入導出數據庫,目前在大部分系統中是比較常見的功能了,今天寫個小demo來理解其原理,沒接觸過的同學也可以看看參考下。
目前我所接觸過的導入導出技術主要有POI和iReport,poi主要作爲一些數據批量導入數據庫,iReport做報表導出。另外還有jxl類似poi的方式,不過貌似很久沒跟新了,2007之後的office好像也不支持,這裏就不說了。
2、POI使用詳解
2.1 什麼是Apache POI?
Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。
2.2 POI的jar包導入
本次講解使用maven工程,jar包版本使用poi-3.14和poi-ooxml-3.14。目前最新的版本是3.16。因爲3.15以後相關api有更新,部分操作可能不一樣,大家注意下。
2.3 POI的API講解
2.3.1 結構
HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
HWPF - 提供讀寫Microsoft Word格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀寫Microsoft Visio格式檔案的功能。
2.3.2 對象
本文主要介紹HSSF和XSSF兩種組件,簡單的講HSSF用來操作Office 2007版本前excel.xls文件,XSSF用來操作Office 2007版本後的excel.xlsx文件,注意二者的後綴是不一樣的。
HSSF在org.apache.poi.hssf.usermodel包中。它實現了Workbook 接口,用於Excel文件中的.xls格式
常用組件:
HSSFWorkbook excel的文檔對象
HSSFSheet excel的表單
HSSFRow excel的行
HSSFCell excel的格子單元
HSSFFont excel字體
HSSFDataFormat 日期格式
HSSFHeader sheet頭
HSSFFooter sheet尾(只有打印的時候才能看到效果)
樣式:
HSSFCellStyle cell樣式
輔助操作包括:
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 錯誤信息表
XSSF在org.apache.xssf.usemodel包,並實現Workbook接口,用於Excel文件中的.xlsx格式
常用組件:
XSSFWorkbook excel的文檔對象
XSSFSheet excel的表單
XSSFRow excel的行
XSSFCell excel的格子單元
XSSFFont excel字體
XSSFDataFormat 日期格式
和HSSF類似;
2.3.3 兩個組件共同的字段類型描述
其實兩個組件就是針對excel的兩種格式,大部分的操作都是相同的。
2.3.4 操作步驟
以HSSF爲例,XSSF操作相同。
首先,理解一下一個Excel的文件的組織形式,一個Excel文件對應於一個workbook(HSSFWorkbook),一個workbook可以有多個sheet(HSSFSheet)組成,一個sheet是由多個row(HSSFRow)組成,一個row是由多個cell(HSSFCell)組成。
3、代碼操作
3.1 效果圖
慣例,貼代碼前先看效果圖
Excel文件兩種格式各一個:
代碼結構:
導入後:(我導入了兩遍,沒做校驗)
導出效果:
3.2 代碼詳解
這裏我以Spring+SpringMVC+Mybatis爲基礎
Controller:
Service
3.3 導出文件api補充
大家可以看到上面service的代碼只是最基本的導出。
在實際應用中導出的Excel文件往往需要閱讀和打印的,這就需要對輸出的Excel文檔進行排版和樣式的設置,主要操作有合併單元格、設置單元格樣式、設置字體樣式等。
3.3.1 單元格合併
使用HSSFSheet的addMergedRegion()方法
參數CellRangeAddress 表示合併的區域,構造方法如下:依次表示起始行,截至行,起始列, 截至列
3.3.2 設置單元格的行高和列寬
3.3.3 設置單元格樣式
1、創建HSSFCellStyle
2、設置樣式
3、將樣式應用於單元格
3.3.4設置字體樣式
1、創建HSSFFont對象(調用HSSFWorkbook 的createFont方法)
2、設置字體各種樣式
3、將字體設置到單元格樣式
大家可以看出用poi導出文件還是比較麻煩的,等下次在爲大家介紹下irport的方法。
導出的api基本上就是這些,最後也希望上文對大家能有所幫助。