Apache POI HSSF读写Excel总结

Apache POI HSSF读写Excel总结
博客分类: Apache POI
ApacheExcelJavaHTML
Apache POI HSSF和XSSF读写EXCEL总结
HSSF是指2007年以前的,XSSF是指2007年版本以上的
这个还是比较好用的,这些总结来自Apache的官方向导的点点滴滴
还有好多没有没有写的,详细的请参考http://poi.apache.org/spreadsheet/quick-guide.html
还有LOG也比较好看

Java代码 收藏代码

public class SummaryHSSF {  

    public static void main(String[] args) throws IOException {  
        //创建Workbook对象(这一个对象代表着对应的一个Excel文件)  
                     //HSSFWorkbook表示以xls为后缀名的文件  
        Workbook wb = new HSSFWorkbook();  
        //获得CreationHelper对象,这个应该是一个帮助类  
        CreationHelper helper = wb.getCreationHelper();  
        //创建Sheet并给名字(表示Excel的一个Sheet)  
        Sheet sheet1 = wb.createSheet("HSSF_Sheet_1");        
        Sheet sheet2 = wb.createSheet("HSSF_Sheet_2");  
        //Row表示一行Cell表示一列  
        Row row = null;  
        Cell cell = null;  
        for(int i=0;i<60;i=i+2){  
            //获得这个sheet的第i行  
            row = sheet1.createRow(i);  
            //设置行长度自动             
            //row.setHeight((short)500);  
            row.setHeightInPoints(20);  
            //row.setZeroHeight(true);  
            for(int j=0;j<25;j++){         
                //设置每个sheet每一行的宽度,自动,根据需求自行确定  
                sheet1.autoSizeColumn(j+1, true);  
                //创建一个基本的样式  
                CellStyle cellStyle = SummaryHSSF.createStyleCell(wb);  
                //获得这一行的每j列  
                cell = row.createCell(j);  
                if(j==0){  
                    //设置文字在单元格里面的位置  
                    cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);  
                    //先创建字体样式,并把这个样式加到单元格的字体里面  
                    cellStyle.setFont(createFonts(wb));  
                    //把这个样式加到单元格里面  
                    cell.setCellStyle(cellStyle);                     
                    //给单元格设值  
                    cell.setCellValue(true);  
                }else if(j==1){  
                    //设置文字在单元格里面的位置  
                    cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);  
                    //设置这个样式的格式(Format)  
                    cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "#,##0.0000");                    
                    //先创建字体样式,并把这个样式加到单元格的字体里面  
                    cellStyle.setFont(createFonts(wb));  
                    //把这个样式加到单元格里面  
                    cell.setCellStyle(cellStyle);  
                    //给单元格设值  
                    cell.setCellValue(new Double(2008.2008));  
                }else if(j==2){  
                    cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);                      
                    cellStyle.setFont(createFonts(wb));  
                    cell.setCellStyle(cellStyle);  
                    cell.setCellValue(helper.createRichTextString("RichString"+i+j));                     
                }else if(j==3){  
                    cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);  
                    cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "MM-yyyy-dd");  
                    cell.setCellStyle(cellStyle);  
                    cell.setCellValue(new Date());  
                }else if(j==24){  
                    cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);  
                    cellStyle.setFont(createFonts(wb));  
                    //设置公式  
                    cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");                    
                }else{                    
                    cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);  
                    cellStyle = SummaryHSSF.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColors.ORANGE.getIndex(),CellStyle.SOLID_FOREGROUND);  
                    cell.setCellStyle(cellStyle);  
                    cell.setCellValue(1);  
                }  
            }  
        }  
        //输出  
        OutputStream os = new FileOutputStream(new File("c://SummaryHSSF.xls"));  
        wb.write(os);  
        os.close();       
    }  
    /** 
     * 边框 
     * @param wb 
     * @return 
     */  
    public static CellStyle createStyleCell(Workbook wb){  
        CellStyle cellStyle = wb.createCellStyle();  
        //设置一个单元格边框颜色  
        cellStyle.setBorderBottom(CellStyle.BORDER_THIN);  
        cellStyle.setBorderTop(CellStyle.BORDER_THIN);  
        cellStyle.setBorderLeft(CellStyle.BORDER_THIN);  
        cellStyle.setBorderRight(CellStyle.BORDER_THIN);  
        //设置一个单元格边框颜色  
        cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());  
        cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());  
        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());  
        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());          
        return cellStyle;  
    }  
    /** 
     * 设置文字在单元格里面的位置 
     * CellStyle.ALIGN_CENTER 
     * CellStyle.VERTICAL_CENTER 
     * @param cellStyle 
     * @param halign 
     * @param valign 
     * @return 
     */  
    public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){  
        //设置上下  
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);  
        //设置左右  
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);  
        return cellStyle;  
    }  
    /** 
     * 格式化单元格 
     * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找 
     * @param cellStyle 
     * @param fmt 
     * @return 
     */  
    public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){  
        //还可以用其它方法创建format  
        cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));  
        return cellStyle;  
    }  
    /** 
     * 前景和背景填充的着色 
     * @param cellStyle 
     * @param bg IndexedColors.ORANGE.getIndex(); 
     * @param fg IndexedColors.ORANGE.getIndex(); 
     * @param fp CellStyle.SOLID_FOREGROUND 
     * @return 
     */  
    public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){  
        //cellStyle.setFillBackgroundColor(bg);  
        cellStyle.setFillForegroundColor(fg);  
        cellStyle.setFillPattern(fp);  
        return cellStyle;  
    }  
    /** 
     * 设置字体 
     * @param wb 
     * @return 
     */  
    public static Font createFonts(Workbook wb){  
        //创建Font对象  
        Font font = wb.createFont();  
        //设置字体  
        font.setFontName("黑体");  
        //着色  
        font.setColor(HSSFColor.BLUE.index);  
        //斜体  
        font.setItalic(true);  
        //字体大小  
        font.setFontHeight((short)300);  
        return font;  
    }  
}  

读取Excel文件
Java代码 收藏代码

public class ReadExcel {  
    public static void main(String[] args) throws Exception {  
        InputStream is = new FileInputStream(new File("c://SummaryHSSF.xls"));  
        //根据输入流创建Workbook对象  
        Workbook wb = WorkbookFactory.create(is);  
        //get到Sheet对象  
        Sheet sheet = wb.getSheetAt(0);  
        //这个必须用接口  
        for(Row row : sheet){  
            for(Cell cell : row){  
                //cell.getCellType是获得cell里面保存的值的type  
                //如Cell.CELL_TYPE_STRING  
                switch(cell.getCellType()){  
                    case Cell.CELL_TYPE_BOOLEAN:  
                        //得到Boolean对象的方法  
                        System.out.print(cell.getBooleanCellValue()+" ");  
                        break;  
                    case Cell.CELL_TYPE_NUMERIC:  
                        //先看是否是日期格式  
                        if(DateUtil.isCellDateFormatted(cell)){  
                            //读取日期格式  
                            System.out.print(cell.getDateCellValue()+" ");  
                        }else{  
                            //读取数字  
                            System.out.print(cell.getNumericCellValue()+" ");  
                        }  
                        break;  
                    case Cell.CELL_TYPE_FORMULA:  
                        //读取公式  
                        System.out.print(cell.getCellFormula()+" ");  
                        break;  
                    case Cell.CELL_TYPE_STRING:  
                        //读取String  
                        System.out.print(cell.getRichStringCellValue().toString()+" ");  
                        break;                    
                }  
            }  
            System.out.println("");  
        }  
    }  
}  

还有一种传统的读法
Java代码 收藏代码

Sheet sheet = wb.getSheetAt(0);
for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {
Row row = (Row)rit.next();
for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {
Cell cell = (Cell)cit.next();
// Do something here
}
}
HSSFSheet sheet = wb.getSheetAt(0);
for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {
HSSFRow row = rit.next();
for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {
HSSFCell cell = cit.next();
// Do something here
}
}

来自:
http://langhua9527.iteye.com/blog/388005

感谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值