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);
go big or go home -- facebook