Java實現文件批量導入導出實例(兼容xls,xlsx)
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基本上就是這些,最後也希望上文對大家能有所幫助。
學習Java的同學注意了!!!
學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!


※Java靜態代理與動態代理模式的實現
※淺談Java反射機制
※JVM的內存區域劃分以及垃圾回收機制詳解
※優質免費在線學習網站
※深入理解Java常用類——StringBuilder
TAG:Java團長 |
※SpreadJS ExcelIO實現伺服器端Excel導入導出
※VirtualBox 6.0正式發布:支持虛擬機導出至Oracle Cloud架構
※redis-cli pipe方式導入mysql sql查詢導出redisProtocol格式數據
※eclipse如何導出WAR包
※mongodb 如何導入導出備份恢復
※imp/exp導入導出的一些錯誤
※Python腳本將ABAQUS結果導出到excel的方法
※在.Net Core WebAPI下給Swagger增加導出離線文檔功能
※Pore X Tightening Mask(黑頭導出液)功效
※LibreOffice 6.0即將發布:支持導出EPUB3格式
※如何將數據從Hadoop導出到關係型和NoSQL資料庫?
※Ian Goodfellow:生成對抗網路 GAN 的公式是怎樣推導出來的
※滲透技巧——利用Masterkey離線導出Chrome瀏覽器中保存的密碼
※開源工具Blender將增加glTF格式導入和導出
※記一次悲慘的 excel 導出事件
※入門MySQL資料庫導入與導出及重置root密碼
※5分鐘4K視頻渲染導出僅需4分鐘:2019入門款MacBook Pro簡評
※iOS取證技巧:在無損的情況下完整導出SQLite資料庫
※滲透技巧——導出Chrome瀏覽器中保存的密碼
※逆向資料庫 導出word文檔