南开小巷

导航

JAVA使用POI操作excel

文中处理的excel是2003年以前的版本,使用HSSFworkbook,如果处理2007版本以后的excel,用XSSFworkbook,对于二者的兼容性问题,可参考

http://blog.csdn.net/mmm333zzz/article/details/7962377

 

poi组件中常用的类有HSSFworkbook表示一个完整的excel表格,HSSFsheet表示excel中的一个工作薄,HSSFRow表示工作薄中的一行,HSSFCell表示一个单元格

下面是一个简单的写入的demo

 

public static void main(String [] args){
        try {
            HSSFWorkbook workbook= new HSSFWorkbook();
            HSSFSheet sheet= workbook.createSheet("test");
            HSSFRow row = sheet.createRow(1);
            HSSFCell cell= row.createCell(2);
            cell.setCellValue("test");
            FileOutputStream os= null;
            os = new FileOutputStream("fisrtExcel.xls");
            workbook.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("ok");
    }

下面是一个简单的读取demo

 

 

try {
            FileInputStream file= new FileInputStream("fisrtExcel.xls");
            POIFSFileSystem ts= new POIFSFileSystem(file);
            HSSFWorkbook wb=new HSSFWorkbook(ts);
            HSSFSheet sh= wb.getSheetAt(0);
            HSSFRow ro=null;
            for (int i = 0; sh.getRow(i)!=null; i++) {
                ro=sh.getRow(i);
                for (int j = 0; ro.getCell(j)!=null; j++) {
                    System.out.print(ro.getCell(j)+"");
                }
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("ok");

下面是几个常用的api

 

 

//使用公式
    cell2.setCellFormula("B2");
    //设置列宽
    sheet.setColumnWidth(columnIndex, width);
    //设置行高
    row.setHeight(height);
    //设这样式:
    HSSFFont font= workbook.createFont();
    font.setFontHeightInPoints(height);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    font.setFontName("黑体");
    HSSFCellStyle style= workbook.createCellStyle();
    style.setFont(font);
    //style可以设置对齐样式,边框,和格式化日期。
    cell.setCellStyle(style);
    //合并单元格
    sheet.addMergedRegion(region);

 

我们之前提到了一个jxl的使用。当时在网上也找到了一个使用的demo,可以参考这里:

 

public static void main(String [] args){
        try {
            WritableWorkbook wwb = null;
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
            wwb = Workbook.createWorkbook(new File("jxlexcel"));
            if(wwb!=null){
                //创建一个可写入的工作表
                WritableSheet ws = wwb.createSheet("sheet1", 0);
                for(inti=0;i<10;i++){
                    for(intj=0;j<5;j++){
                        Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
                        ws.addCell(labelC);
                    }
                }
                wwb.write();
                wwb.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("ok");
    }

对于更复杂的内容这里有几个参考文档:

 

http://www.newxing.com/Tech/Java/Web/Excel_186.html

http://www.yesky.com/18/1886018.shtml

 

总结一下,poi的使用比较简单,主要是写入和读取的时候计算好读取的位置。而且现在项目中已经封装了一个现成的类,几乎几行代码就可以把结果输出到一个excel中并提供下载

posted on 2016-11-29 17:32  南开小巷  阅读(269)  评论(0编辑  收藏  举报