当前位置:文档之家› POI操作Excel常用方法总结

POI操作Excel常用方法总结

POI操作Excel常用方法总结一、POI简介Jakarta POI 是apache的子项目,目标是处理ole2对象。

它提供了一组操纵Windows文档的Java API目前比较成熟的是HSSF接口,处理MS Excel(97-2003对象。

它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。

二、HSSF概况HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

前者很好理解,后者比较抽象,但操作效率要高得多。

三、POI EXCEL文档结构类HSSFWorkbook excel文档对象HSSFSheet excel的sheetHSSFRow excel的行HSSFCell excel的单元格HSSFFont excel字体HSSFName 名称HSSFDataFormat 日期格式HSSFHeader sheet头HSSFFooter sheet尾HSSFCellStyle cell样式HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表四、EXCEL常用操作方法1、得到Excel常用对象POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:\test.xls"));HSSFWorkbook wb = new HSSFWorkbook(fs);//得到Excel工作簿对象HSSFSheet sheet = wb.getSheetAt(0); //得到Excel工作表对象HSSFRow row = sheet.getRow(i);//得到Excel工作表的行HSSFCell cell = row.getCell((short) j);//得到Excel工作表指定行的单元格cellStyle = cell.getCellStyle();//得到单元格样式2、建立Excel常用对象HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行cellStyle = wb.createCellStyle();//创建单元格样式row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格row.createCell((short)0).setCellValue(1); //设置Excel工作表的值3、设置sheet名称和单元格内容wb.setSheetName(1, "第一张工作表",HSSFCell.ENCODING_UTF_16);cell.setEncoding((short) 1);cell.setCellValue("单元格内容");4、取得sheet的数目wb.getNumberOfSheets()5、根据index取得sheet对象HSSFSheet sheet = wb.getSheetAt(0);6、取得有效的行数int rowcount = sheet.getLastRowNum();7、取得一行的有效单元格个数row.getLastCellNum();8、单元格值类型读写cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型cell.getNumericCellValue();//读取为数值类型的单元格内容9、设置列宽、行高sheet.setColumnWidth((short)column,(short)width);row.setHeight((short)height);10、添加区域,合并单元格Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo ,(short)columnTo);//合并从第rowFrom行columnFrom列sheet.addMergedRegion(region);// 到rowTo行columnTo的区域//得到所有区域sheet.getNumMergedRegions()11、保存Excel文件FileOutputStream fileOut = new FileOutputStream(path);wb.write(fileOut);12、根据单元格不同属性返回字符串数值public String getCellStringValue(HSSFCell cell) {String cellValue = "";switch (cell.getCellType()) {case HSSFCell.CELL_TYPE_STRING://字符串类型cellValue = cell.getStringCellValue();if(cellValue.trim().equals("")||cellValue.trim().length()<=0)cellValue=" ";break;case HSSFCell.CELL_TYPE_NUMERIC: //数值类型cellValue = String.valueOf(cell.getNumericCellValue());break;case HSSFCell.CELL_TYPE_FORMULA: //公式cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);cellValue = String.valueOf(cell.getNumericCellValue());break;case HSSFCell.CELL_TYPE_BLANK:cellValue=" ";break;case HSSFCell.CELL_TYPE_BOOLEAN:break;case HSSFCell.CELL_TYPE_ERROR:break;default:break;}return cellValue;}13、常用单元格边框格式HSSFCellStyle style = wb.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框14、设置字体和内容位HSSFFont f = wb.createFont();f.setFontHeightInPoints((short) 11);//字号f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗style.setFont(f);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中style.setRotation(short rotation);//单元格内容的旋转的角度HSSFDataFormat df = wb.createDataFormat();style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式cell.setCellFormula(string);//给单元格设公式style.setRotation(short rotation);//单元格内容的旋转的角度cell.setCellStyle(style);15、插入图片//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));ImageIO.write(bufferImg,"jpg",byteArrayOut);//读进一个excel模版FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");fs = new POIFSFileSystem(fos);//创建一个工作薄HSSFWorkbook wb = new HSSFWorkbook(fs);HSSFSheet sheet = wb.getSheetAt(0);HSSFPatriarch patriarch = sheet.createDrawingPatriarch();HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10 );patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbo ok.PICTURE_TYPE_JPEG));16、调整工作单位置HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("format sheet");HSSFPrintSetup ps = sheet.getPrintSetup();sheet.setAutobreaks(true);ps.setFitHeight((short)1);ps.setFitWidth((short)1);17、设置打印区域HSSFSheet sheet = wb.createSheet("Sheet1");wb.setPrintArea(0, "$A$1:$C$2");18、标注脚注HSSFSheet sheet = wb.createSheet("format sheet");HSSFFooter footer = sheet.getFooter()footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() ); 19、在工作单中清空行数据,调整行位置HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("row sheet");// Create various cells and rows for spreadsheet.// Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)sheet.shiftRows(5, 10, -5);20、选中指定的工作表HSSFSheet sheet = wb.createSheet("row sheet");heet.setSelected(true);21、工作表的放大缩小HSSFSheet sheet1 = wb.createSheet("new sheet");sheet1.setZoom(3,4); // 75 percent magnification22、头注和脚注HSSFSheet sheet = wb.createSheet("new sheet");HSSFHeader header = sheet.getHeader();header.setCenter("Center Header");header.setLeft("Left Header");header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");23、自定义颜色HSSFCellStyle style = wb.createCellStyle();style.setFillForegroundColor(HSSFColor.LIME.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);HSSFFont font = wb.createFont();font.setColor(HSSFColor.RED.index);style.setFont(font);cell.setCellStyle(style);24、填充和颜色设置HSSFCellStyle style = wb.createCellStyle();style.setFillBackgroundColor(HSSFColor.AQUA.index);style.setFillPattern(HSSFCellStyle.BIG_SPOTS);HSSFCell cell = row.createCell((short) 1);cell.setCellValue("X");style = wb.createCellStyle();style.setFillForegroundColor(HSSFColor.ORANGE.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);cell.setCellStyle(style);// Orange "foreground", foreground being the fill foreground not the font color.25、强行刷新单元格公式HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);private static void updateFormula(Workbook wb,Sheet s,int row){Row r=s.getRow(row);Cell c=null;FormulaEcaluator eval=null;if(wb instanceof HSSFWorkbook)eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);else if(wb instanceof XSSFWorkbook)eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);for(int i=r.getFirstCellNum();i<r.getLastCellNum();i++){c=r.getCell(i);if(c.getCellType()==Cell.CELL_TYPE_FORMULA)eval.evaluateFormulaCell(c);}}说明:FormulaEvaluator提供了evaluateFormulaCell(Cell cell)方法,计算公式保存结果,但不改变公式。

相关主题