Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java AP。简单来讲,我们可以利用POI操作绝大多数微软的office产品。POI项目组件构成如下图所示。
简单解释如下:
HSSF(XSSF) - 提供读写Microsoft Excel XLS(XLSX)格式档案的功能。
HWPF(XWPF) - 提供读写Microsoft Word DOC(docx)格式档案的功能。
HSLF和XSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
上文可以看出POI提供了对Microsoft办公软件的操作接口,目前对excel、word、powerpoint的支持更加完善,可以读写这些文档,而对于其他应用仅提供了读取信息的功能。下面以操作excel为例简单介绍下POI的使用。
使用POI操作不同OFFICE应用用到的POI组件不同,从而引用的jar包也不一样。例如我们仅利用HSSF来建立excel文件,则我们只需要进入POI.jar,在此例中引入的是poi-3.8-20120326.jar。
创建excel首先要获取到Workbook。Workbook可以直接通过输出流(OutputStream)输出到指定位置。例如我们需要在C盘创建一个text.xls文件,则可以利用Workbook和FileOutputStream来做到。
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; public static void main(String[] args){ try { FileOutputStream out = new FileOutputStream("c:\\test.xls"); Workbook wb = new HSSFWorkbook(); wb.write(out); out.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } }
此时创建的excel文件虽然可以打开,但实际上其为空的excel应用程序,打开会发生错误,随即修复为带有一个sheet的文件。我们需要为之工作簿添加sheet。Workbook接口能够创建出sheet,且新创建的sheet会自动被添加到Workbook队列中,且能为sheet命名。在工作簿中有了两页表格,我们可以为之添加数据、设置样式等等。值得注意的是我们在sheet中创建的行(row)或者单元格(cell)仅当为其设置了内容,才会自动增加到sheet上。
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; public class TestHSSF { public static void main(String[] args){ // create a new file FileOutputStream out; try { out = new FileOutputStream("c:\\test.xls"); Workbook wb = new HSSFWorkbook(); //创建sheet Sheet s1 = wb.createSheet(); Sheet s2 = wb.createSheet(); //命名sheet wb.setSheetName(0, "第一个sheet" ); wb.setSheetName(1, "第二个sheet" ); //创建行 Row r = s1.createRow(30); //设置行高 r.setHeight((short)1132); //创建单元格 Cell c = r.createCell(3); //创建样式,设置字体颜色、设置为粗体、设置底边框宽度等等 CellStyle cs = wb.createCellStyle(); cs.setBorderBottom((short)2); Font f = wb.createFont(); f.setFontHeightInPoints((short) 18); f.setColor( (short)0xc ); f.setBoldweight(Font.BOLDWEIGHT_BOLD); cs.setFont(f); //设置单元格为样式cs c.setCellStyle(cs); //设置单元格值 c.setCellValue("测试"); wb.write(out); out.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
本文概括陈述了POI的组件构成,及其主要作用,使我们了解到在工程中可以利用POI来操作office应用,同时略举了一个简单例子说明Workbook(能够创建CellStyle、Font、Sheet)、CellStyle、Font、Sheet(能够创建Row、Cell)、Row和Cell的关系,进而了解HSSF组件的简单使用。
扩展阅读:
《OLE、OCX和ActiveX控件之间的比较》
http://www.cnblogs.com/olawonzhu/articles/1683424.html