POI使用小结

阅读更多
本文主要是针对本人在实际项目中,利用POI来开发数据导入和导出的应用而总结而来。其实JAVA在处理Window OLE 2复合文档格式操作的API,还有很多POI、JExcelApi、IText等,而在实际的个人感觉POI确实是一个不错的选择。下面就POI开发的相关内容进行简要的介绍下,包括POI组成、开发步骤、具体示例、知识点汇总等内容进行讲解。POI组成
POI组成
 官方网站: http://jakarta.apache.org/poi/,这个是POI的官方网站,用户可以先从这里下载。最新的版本3.0.2,下载解压后里面有三个jar包(poi-3.0.2-FINAL-20080204.jar/ poi-contrib-3.0.2-FINAL-20080204.jar/ poi-scratchpad-3.0.2-FINAL-20080204.jar),而在这里包中主要含:
org.apache.poi.hssf.eventmodel    处理在读取和写入Excel文档中生成的各种动作.
    org.apache.poi.hssf.eventusermodel    提供读取Excel文档的各个类.
    org.apache.poi.hssf.record.formula    包含公式处理类, 这些类使用在Excel文档中.
    org.apache.poi.hssf.usermodel    包含生成Excel文档的各个类.
    org.apache.poi.hssf.util    提供处理Excel文档各个属性的工具类.
开发步骤
1:先下载POI包;
2:解压后将里面的3个jar文件拷贝至WEB-INF\lib中。
3:刷新工程后,即可以使用jar包中的内容了。

 读取POI文档
一:以文件名创建一个InputStream
二:以上面的InputStream实例创建一个HSSFWorkbook.
三:HSSFWorkbook的getSheetAt(index)可获取相应的工作页
四:工作页调用方法获取行
五:行再获取相应的格,调用单元格的方法,然后取出对应数据。

 创建Excel文件
一:以new HSSFWorkbook()构造一个新的Excel文档
二:以HSSFWorkbook的createSheet("工作本名"),创建一个新的工作页。
三:新的工作页以createRow(RowIndex)依次创建行
四:HSSFRow以createCell(CellIndex)依次创建单元格
五:设置相应单元格的格式,值。
具体示例
示例一:读取Excel文件中的所有数据,包括对个工作表(薄)。
public static void ReadExcel2(String file) {
int total = 0;
try {
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
int sn = wb.getNumberOfSheets();
for(int i=0;i HSSFSheet sheet = wb.getSheetAt(i);
for(int j=0;j HSSFRow row = sheet.getRow(j);
for(int k=0;k HSSFCell cell = row.getCell((short)k);
if(cell.getCellType()==HSSFCell.CELL_TYPE_STRING){
System.out.println(cell.getStringCellValue());
}
else{
System.out.println(cell.getBooleanCellValue());
}
total++;
}
}
}
System.out.println(total);

} catch (Exception e) {
System.out.println(e.getStackTrace());
}
}

示例一:创建一个Excel,并把相应的数据添入到指定的单元格。
public static boolean createExcel(String file){
boolean flag = false;
try{
// wb,对应一个内存中的excel文档
        HSSFWorkbook wb = new HSSFWorkbook();
        // sheet创建一个工作页
       for(int h =0;h<3;h++){
        HSSFSheet sheet = wb.createSheet("jzh"+h);
       
        //设置列的宽度
        sheet.setDefaultColumnWidth((short)20);
        //String[] s = new String[]{"姓名","年龄","地址","城市","公司","工作","职位","收入"};
        String[] s = {"姓名","年龄","地址","城市","公司","工作","职位","收入"};
        cellStyle = getAnyCellStyle(wb,getHdrFont(wb,12),HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_CENTER, (short)-1, true);
        for(int x=0;x         HSSFRow row = sheet.createRow(0);
       
            //设置行的高度
            row.setHeight((short)500);
            HSSFCell cell = row.createCell((short)x);
                cell.setEncoding(HSSFCell.ENCODING_UTF_16);                
                cell.setCellValue(s[x]);
                cell.setCellStyle(cellStyle);
        }
       
       
        for (short i = 1; i < 100; i++)
        {
            // HSSFRow,对应一行
            HSSFRow row = sheet.createRow(i);
     
            //设置行的高度
            row.setHeight((short)500);
       
            for (short j = 0; j < 8; j++)
            {
                // HSSFCell对应一格
                HSSFCell cell = row.createCell(j);
                cell.setEncoding(HSSFCell.ENCODING_COMPRESSED_UNICODE);                
                //cell.setCellValue("Java,我的信仰" + String.valueOf(i));
                cell.setCellValue(true);
            }
        }
        OutputStream out = new FileOutputStream(file);
        wb.write(out);
        out.close();

flag = true;
       }
}
catch(Exception ex){
flag = false;
}
return flag;
}
知识点汇总
 设置单元格格式
1. 创建字体,设置其为红色、粗体:
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
2、创建格式
HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
3、应用格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标题"); 

 获得这个工作表数据行数
System.out.println(sheet.getLastRowNum());
 获得列数
System.out.println(row.getLastCellNum());

 设置第三列的宽度为5
sheet.setColumnWidth((short)3,(short)5);

 设置字体格式
HSSFCellStyle titlestyle = workbook.createCellStyle();
HSSFFont titlefont = workbook.createFont();
titlefont.setFontHeightInPoints((short)18);
titlefont.setFontName("黑体");
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titlestyle.setFont(titlefont);

titlestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titlestyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

HSSFCell titlecell = titlerow.createCell((short)((fileds.length) / 3));
titlecell.setCellStyle(titlestyle);
titlecell.setEncoding(HSSFCell.ENCODING_UTF_16);
titlecell.setCellValue(titles);

 合并单元格
主要是从(1,3)到(5,6)的合并点
sheet.addMergedRegion(new Region((short)1,(short)3,(short)5,(short)6));

你可能感兴趣的:(Excel,Apache,工作,J#,Eclipse)