1. 程式人生 > >利用POI實現Excel的匯入匯出

利用POI實現Excel的匯入匯出

在專案開中,我們經常需要用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();
	}
}