1.POI介绍

  1.        Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
  2.        Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
  3.        HSSF是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”
  4. This is most developed for Excel workbooks (SS=HSSF+XSSF). Work is progressing for Word documents (HWPF+XWPF) and PowerPoint presentations (HSLF+XSLF)
  5. wps/office 2013 必须使用OOXML,2003版本会部分内容显示不正常。(表格线、隐藏列)
  6.         Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
  7. HSSF是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”
  8.          This is most developed for Excel workbooks (SS=HSSF+XSSF). Work is progressing for Word documents (HWPF+XWPF) and PowerPoint presentations (HSLF+XSLF)
  9.        wps/office 2013 必须使用OOXML,2003版本会部分内容显示不正常。(表格线、隐藏列)
  10. Excel 不同版本的最大行列数:

Excel 2003      2007
列      255            16384
行       65535


2.POI的运用


  1. 生产厂家批量导出,通用
  2. 出货表月统计,读取模板,读取样式


3.POI宏观的操作步骤


public void export1() throws IOException{
/* 操作步骤:
* 1、创建工作簿对象workbook
* 2、创建工作表对象sheet
* 3、创建行对象 row
* 4、创建单元格对象,赋列值
* 5、写入内容
* 6、设置样式(可以没有)
* 7、写入文件
* 8、关闭文件 */

HSSFWorkbook wb = new HSSFWorkbook(); //新建工作簿
HSSFSheet sheet = wb.createSheet(); //新建工作表
HSSFRow nRow = sheet.createRow(3); //创建行对象,起始值为0
HSSFCell nCell = nRow.createCell((short)4); //创建单元格对象

nCell.setCellValue("无悔_一叶扁舟"); //3.9版本放开

FileOutputStream fOut = new FileOutputStream("d:\\test.xls"); //创建xls文件,无内容 0字节
wb.write(fOut); //写内容,xls文件已经可以打开
fOut.flush(); //刷新缓冲区
fOut.close(); //关闭
}



package poi;

import java.io.FileOutputStream;

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;


/**
 * @ClassName: Test1HFFS
 * @Description 类的作用: 需要导入的jar包
 * 		dom4j-1.6.1.jar
 * 		poi-3.9-20121203.jar
 *		poi-ooxml-3.9-20121203.jar 
 * 		poi-ooxml-schemas-3.9-20121203.jar
 * 		stax-api-1.0.1.jar 
 *		xmlbeans-2.3.0.jar
 * @author 作者:一叶扁舟(skiff)
 * @date 2017年4月8日 下午5:26:12
 * 
 */
public class Test1HFFS {
	public static void main(String[] args) throws Exception {
		Test1HFFS tm = new Test1HFFS();
		tm.print();
	}
	
	/** 
	* @Title: print 
	* @author:一叶扁舟(skiff)
	* @Description: TODO
	* @param @throws Exception    
	* @return void    
	* @throws 
	*/
	public void print() throws Exception{
		String xlsFile = "d:\\poiHFFS.xls";
		
		//STEP 1:打开excel文件
		HSSFWorkbook wb = new HSSFWorkbook();									//创建excel文件
		//HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(xlsFile));		//打开已存在的excel文件

		//STEP 2:打开当前工作簿
		HSSFSheet sheet = wb.createSheet("我的第一个工作簿");		//建立新的sheet对象
		//HSSFSheet sheet = wb.getSheetAt(0);						//选择第一个工作簿
		//wb.setSheetName(0, "我的第一个工作簿");					//设置工作簿的名称

		HSSFRow nRow = null;
		HSSFCell nCell   = null;
		
		//STEP 3:创建行对象
		nRow = sheet.createRow((short)1);						//第2行

		//STEP 4:指定列 创建单元格对象
		nCell = nRow.createCell((short)(2));					//第3列
		
		//STEP 5:指定列 创建单元格对象
		nCell.setCellValue("我是单元格");
		
		//STEP 6:设置样式
		nCell.setCellStyle(leftStyle(wb));

		//STEP 7:关闭保存excel文件
		FileOutputStream fOut = new FileOutputStream(xlsFile);
		wb.write(fOut);
		fOut.flush();
		fOut.close();

		System.out.println("finish.");
	}	
	
	
	/** 
	* @Title: leftStyle 
	* @author:一叶扁舟(skiff)
	* @Description: 设置单元格样式
	* @param @param wb
	* @param @return    
	* @return HSSFCellStyle    
	* @throws 
	*/
	private HSSFCellStyle leftStyle(HSSFWorkbook wb){
		HSSFCellStyle curStyle = wb.createCellStyle();
		HSSFFont curFont = wb.createFont();								//设置字体
		//curFont.setFontName("Times New Roman");						//设置英文字体
		curFont.setFontName("微软雅黑");								//设置英文字体
		curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);					//设置中文字体,那必须还要再对单元格进行编码设置
		curFont.setFontHeightInPoints((short)10);						//字体大小
		curStyle.setFont(curFont);
		
		curStyle.setBorderTop(HSSFCellStyle.BORDER_THICK);				//粗实线
		curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);			//实线
		curStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);			//比较粗实线
		curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);				//实线
		
		curStyle.setWrapText(true);  									//换行   
		curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);				//横向具右对齐
		curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);	//单元格垂直居中
		
		return curStyle;
	}
	
}