在項目開中,我們經常需要用Excel來導入導出數據,而POI技術是實現我們需求的一個選擇。
POI支持office的所有版本
POI全稱 PoorObfuscation Implementation,直譯為“可憐的模糊實現”,利用POI接口可以通過java操作Microsoft office 套件工具的讀寫功能。官網:http://poi.apache.org ,
在官網中下載jar包以及源碼包.
Jar包的引入:①對于只操作2003 及以前版本的excel,只需要poi-3.10.1-20140818.jar
②如果需要同時對2007及以后版本進行操作則需要poi-ooxml-3.10.1-20140818.jar,poi-ooxml-schemas-3.10.1-20140818.jar,以及ooxml-lib目錄下的 xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。
以下是一個對應03版本的實例,創建一個helloWorld為命名的工作表,在表中的第三行第三列寫上hellowrold,并把excel文件寫到本地。以及再從本地中讀取這個剛保存的excel,找到第一張表(即helloWorld表,因為剛才只創建了一張),找到第三行第三列,讀出它的內容并寫在console中
package poi;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.CellType;import org.junit.Test;public class testPOI03 { @Test public void writeExcel03() throws IOException{ //創建工作簿 HSSFWorkbook workBook = new HSSFWorkbook(); //創建工作表 工作表的名字叫helloWorld HSSFSheet sheet = workBook.createSheet("helloWorld"); //創建行,第3行 HSSFRow row = sheet.createRow(2); //創建單元格,操作第三行第三列 HSSFCell cell = row.createCell(2, CellType.STRING); cell.setCellValue("helloWorld"); workBook.write(new File("d://poi//測試.xls")); workBook.close();//最后記得關閉工作簿 } @Test public void readExcel03() throws IOException{ FileInputStream inputStream = new FileInputStream(new File("d://poi//測試.xls")); //讀取工作簿 HSSFWorkbook workBook = new HSSFWorkbook(inputStream); //讀取工作表 HSSFSheet sheet = workBook.getSheetAt(0); //讀取行 HSSFRow row = sheet.getRow(2); //讀取單元格 HSSFCell cell = row.getCell(2); String value = cell.getStringCellValue(); System.out.PRintln(value); inputStream.close(); workBook.close();//最后記得關閉工作簿 }}接來下用07版的方法,同樣演示上一個實例,這兩個實例區別,就僅僅在于所使用的的類不同,原理都一樣
package poi;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.ss.usermodel.CellType;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.junit.Test;public class testPOI07 { @Test public void writeExcel07() throws IOException{ //創建工作簿 XSSFWorkbook workBook = new XSSFWorkbook(); //創建工作表 XSSFSheet sheet = workBook.createSheet("helloWorld"); //創建行 XSSFRow row = sheet.createRow(2); //創建單元格,操作第三行第三列 XSSFCell cell = row.createCell(2, CellType.STRING); cell.setCellValue("helloWorld"); FileOutputStream outputStream = new FileOutputStream(new File("d://poi//測試.xlsx")); workBook.write(outputStream); workBook.close();//記得關閉工作簿 } @Test public void readExcel07() throws IOException{ FileInputStream inputStream = new FileInputStream(new File("d://poi//測試.xlsx")); //讀取工作簿 XSSFWorkbook workBook = new XSSFWorkbook(inputStream); //讀取工作表 XSSFSheet sheet = workBook.getSheetAt(0); //讀取行 XSSFRow row = sheet.getRow(2); //讀取單元格 XSSFCell cell = row.getCell(2); String value = cell.getStringCellValue(); System.out.println(value); inputStream.close();//關閉工作簿 workBook.close(); }}最后來一點進階的東西,樣式。比如平常操作excel中常見的操作,比如合并單元格,水平居中,垂直居中,改變字體大小,加粗,設置單元格背景顏色 等等。
按照前端的說法也可以叫做樣式,都通通可以通過POI實現的。
在接下來的一個實例之前,先了解一下POI中樣式的理解,是一定要記住的,知道了再進行excel的美化簡直soeasy!:
1.合并單元格,屬于工作簿,獨立創建,應用于工作表
2.樣式,屬于工作簿,由工作表創建,應用于單元格
3.字體,屬于工作簿,由工作簿創建,應用于樣式
4.設置背景顏色,一定要先設置顏色的填充模式
以下這個實例是對之前做的再進行深入,運用上面的幾個點對它加一些美化工作
package poi;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;import org.apache.poi.ss.usermodel.FillPatternType;import org.apache.poi.ss.usermodel.HorizontalAlignment;import org.apache.poi.ss.usermodel.VerticalAlignment;import org.apache.poi.ss.util.CellRangeAddress;import org.junit.Test;public class testPOIExcelStyle { @Test public void testExcelStyle() throws IOException{ //1.創建工作簿 HSSFWorkbook workBook = new HSSFWorkbook(); //創建合并單元格對象 CellRangeAddress rangeAddress = new CellRangeAddress(2, 2, 2, 4); //創建樣式 HSSFCellStyle style = workBook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); //創建字體 HSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 16); //font.setFontHeight((short)320); 效果和上面一樣。用這個方法設置大小,值要設置為字體大小*20倍,具體看API文檔 font.setColor(HSSFColor.GREEN.index); font.setBold(true); style.setFont(font); //設置背景 style.setFillPattern(FillPatternType.SOLID_FOREGROUND); style.setFillForegroundColor(HSSFColor.RED.index); //2.創建工作表 HSSFSheet sheet = workBook.createSheet("helloWorld"); //添加合并區域 sheet.addMergedRegion(rangeAddress); //3.創建行 HSSFRow row = sheet.createRow(2); //4.創建單元格 HSSFCell cell = row.createCell(2); cell.setCellValue("helloWorld"); cell.setCellStyle(style); //輸出 FileOutputStream outputStream = new FileOutputStream(new File("d://poi//測試.xls")); workBook.write(outputStream); workBook.close(); outputStream.close(); }}
新聞熱點
疑難解答