Java应用之POI

POI的简介

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF的概况

     HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

POI Excel文档结构类

      HSSFWorkbook  excel 文档对象

    HSSFSheet  excel的sheet    HSSFRow excel 的 行

    HSSFCell  excel的单元格    HSSFFont excel 字体

    HSSFName  名称 HSSFDataFormat 日期格式

    HSSFHeader sheet头

    HSSFFooter sheet尾

    HSSFCellStyle cell样式

    HSSFDateUtil 日期

    HSSFPrintSetup 打印

    HSSFErrorConstants 错误信息表

Excel常用操作方法

1、 得到Excel常用对象

 1  POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));   
 3 
 4     //得到Excel工作簿对象   
 5     HSSFWorkbook wb = new HSSFWorkbook(fs); 
 6  
 7     //得到Excel工作表对象   
 8     HSSFSheet sheet = wb.getSheetAt(0);
 9    
10     //得到Excel工作表的行   
11     HSSFRow row = sheet.getRow(i);  
12 
13     //得到Excel工作表指定行的单元格   
14     HSSFCell cell = row.getCell((short) j);  
15 
16     cellStyle = cell.getCellStyle();//得到单元格样式

 2、建立Excel常用对象

1   HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象  
2     HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象    
3     HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行  
4     cellStyle = wb.createCellStyle();//创建单元格样式  
5     row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格  
6     row.createCell((short)0).setCellValue(1); //设置Excel工作表的值

3、设置sheet名称和单元格内容

1     wb.setSheetName(1, "第一张工作表",HSSFCell.ENCODING_UTF_16);          
2     cell.setEncoding((short) 1);      
3     cell.setCellValue("单元格内容");  

4、取得sheet的数目

1 wb.getNumberOfSheets() 

5、  根据index取得sheet对象;取得有效的行数

//根据index取得sheet对象;
HSSFSheet sheet = wb.getSheetAt(0);
//取得有效的行数;
int rowcount = sheet.getLastRowNum(); 
//取得一行的有效单元格个数;
row.getLastCellNum();
//单元格值类型读写
 cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型  
 cell.getNumericCellValue();//读取为数值类型的单元格内容 

6、Excel的一些设置方法

 1 //设置列宽、行高
 2 
 3     sheet.setColumnWidth((short)column,(short)width);      
 4     row.setHeight((short)height);
 5 
 6 //添加区域,合并单元格
 7 
 8     Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo  
 9     ,(short)columnTo);//合并从第rowFrom行columnFrom列  
10     sheet.addMergedRegion(region);// 到rowTo行columnTo的区域     
11     //得到所有区域      
12     sheet.getNumMergedRegions()   
13 
14 //常用单元格边框格式
15 
16     HSSFCellStyle style = wb.createCellStyle();      
17     style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框       
18     style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框       
19     style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框       
20     style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 
21 
22 //设置字体和内容位置
23 
24     HSSFFont f  = wb.createFont();      
25     f.setFontHeightInPoints((short) 11);//字号      
26     f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗      
27     style.setFont(f);      
28     style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中      
29     style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中      
30     style.setRotation(short rotation);//单元格内容的旋转的角度      
31     HSSFDataFormat df = wb.createDataFormat();      
32     style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式      
33     cell.setCellFormula(string);//给单元格设公式      
34     style.setRotation(short rotation);//单元格内容的旋转的角度  
35 
36 //设置打印区域
37 
38     HSSFSheet sheet = wb.createSheet("Sheet1");     
39     wb.setPrintArea(0, "$A$1:$C$2");  
40 
41 //填充和颜色设置
42 
43     HSSFCellStyle style = wb.createCellStyle();     
44     style.setFillBackgroundColor(HSSFColor.AQUA.index);     
45     style.setFillPattern(HSSFCellStyle.BIG_SPOTS);     
46     HSSFCell cell = row.createCell((short) 1);     
47     cell.setCellValue("X");     
48     style = wb.createCellStyle();     
49     style.setFillForegroundColor(HSSFColor.ORANGE.index);     
50     style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     
51     cell.setCellStyle(style);   
52 
53 //自定义颜色
54 
55     HSSFCellStyle style = wb.createCellStyle();     
56     style.setFillForegroundColor(HSSFColor.LIME.index);     
57     style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     
58     HSSFFont font = wb.createFont();     
59     font.setColor(HSSFColor.RED.index);     
60     style.setFont(font);     
61     cell.setCellStyle(style);  

7、插入图片

 1 //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray      
 2      ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();      
 3      BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));      
 4      ImageIO.write(bufferImg,"jpg",byteArrayOut);      
 5     //读进一个excel模版      
 6     FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");       
 7     fs = new POIFSFileSystem(fos);      
 8     //创建一个工作薄      
 9     HSSFWorkbook wb = new HSSFWorkbook(fs);      
10     HSSFSheet sheet = wb.getSheetAt(0);      
11     HSSFPatriarch patriarch = sheet.createDrawingPatriarch();      
12     HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);           
13     patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));    

8、保存Excel文件

1   FileOutputStream fileOut = new FileOutputStream(path);   
2     wb.write(fileOut);

 

posted @ 2017-12-27 09:04  慕容天白  阅读(563)  评论(0编辑  收藏  举报