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