zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    安全运维中基线检查的自动化
    解决“指定的服务已经标记为删除”问题
    linux让命令或程序在终端后台运行的方法(Ubuntu/Fedora/Centos等一样适用)
    微信小程序、SSL证书、开启服务器TSL1.0、TSL1.1、TSL1.2服务
    linux screen工具
    11.2.0.1升级到11.2.0.4报错之中的一个:UtilSession failed: Patch 9413827
    swift 编译提前定义 --不知道怎么定义,可是能够#if
    编译安装 gcc 4.9并验证使用
    sparkR处理Gb级数据集
    【J2EE】在项目中理解J2EE规范
  • 原文地址:https://www.cnblogs.com/XiDaPuBen/p/8124103.html
Copyright © 2011-2022 走看看