zoukankan      html  css  js  c++  java
  • poi对excel的基本读写操作

    最近简单的弄了下poi对excel的应用,为方便自己以后的使用就把一些基本操作记录下来,其他更复杂的操作可以等以后有需求的时候再来深入了解一番!

    写操作:

    Java代码  收藏代码
    1. /** 
    2.  *  
    3.  * 层次结构就是workbook-->Sheet-->Row-->Cell 
    4.  * 只要按照这种层次结构操作就不会有什么大的问题 
    5.  * @author Administrator 
    6.  * 
    7.  */  
    8. public class Test1 {  
    9.   
    10.     public static void main(String args[]) throws IOException {  
    11.           
    12.         //HSSFWorkbook对应的是2003  
    13.         //XSSFWorkbook对应的是2007  
    14.         //对于03和07它们的操作都是差不多的,只是在需要用07的时候把相应的HSSF前缀改成XSSF前缀就可以了  
    15.         //第一步建一个工作簿,即workbook  
    16.         Workbook workbook = new HSSFWorkbook();  
    17.         //第二步建一个工作表单,急sheet  
    18.         Sheet sheet = workbook.createSheet("mysheet1");  
    19.         for (int i=0;i<5;i++) {  
    20.             //有了表单以后就是行Row了,  
    21.             Row row = sheet.createRow(i);  
    22.             for (int j=0;j<5;j++) {  
    23.                 //有了row以后就是row上的一个个小的单元格了  
    24.                 Cell cell = row.createCell(j);  
    25.                 //给单元格添加内容  
    26.                 cell.setCellValue("row"+(i+1)+",column"+(j+1));  
    27.             }  
    28.         }  
    29.         //建一个用于存放新建的excel的文件输出流  
    30.         OutputStream os = new FileOutputStream("file/test1.xls");  
    31.         //把形成的workbook写到一个输出流里面  
    32.         workbook.write(os);  
    33.         os.close();  
    34.     }  
    35.       
    36. }  

    读操作:

    Java代码  收藏代码
    1. public class Test4 {  
    2.   
    3.     public static void main(String args[]) throws IOException {  
    4.         InputStream is = new FileInputStream("file/test1.xls");  
    5.         Workbook wb = new HSSFWorkbook(is);  
    6.         Sheet sheet = wb.getSheetAt(0);  
    7.         // 因为Row,Cell,Sheet都继承了java.lang.Iterator接口,所以可以用下面的方法来进行遍历  
    8.         for (Row row : sheet) {  
    9.             for (Cell cell : row) {  
    10.                 int cellType = cell.getCellType();  
    11.                 switch (cellType) {  
    12.                 //在取数据的时候类型一定要取对,否则将抛出异常  
    13.                 case Cell.CELL_TYPE_STRING:  
    14.                     String str = cell.getRichStringCellValue().getString();  
    15.                     System.out.println(str);// 对取得的数据的简单处理;  
    16.                     break;  
    17.                 case Cell.CELL_TYPE_BLANK:  
    18.                     if (DateUtil.isCellDateFormatted(cell)) {  
    19.                         System.out.println(cell.getDateCellValue());  
    20.                     } else {  
    21.                         System.out.println(cell.getNumericCellValue());  
    22.                     }  
    23.                     break;  
    24.                 case Cell.CELL_TYPE_FORMULA:  
    25.                     System.out.println(cell.getCellFormula());  
    26.                     break;  
    27.                 case Cell.CELL_TYPE_BOOLEAN:  
    28.                     System.out.println(cell.getBooleanCellValue());  
    29.                     break;  
    30.                 default:  
    31.                     System.out.println("---------------------");  
    32.                     break;  
    33.                 }  
    34.             }  
    35.         }  
    36.         //当然还可以这样来遍历  
    37.         //row是从1开始的,cell是从头0开始的,但是在创建的时候它们都是0-based;  
    38.         for (int i=0;i<sheet.getLastRowNum()+1;i++) {  
    39.             Row row = sheet.getRow(i);  
    40.             if (row==null)  
    41.                 continue;  
    42.             for (int j=0;j<row.getLastCellNum();j++) {  
    43.                 Cell cell = row.getCell(j);  
    44.                 if (cell==null)  
    45.                     continue;  
    46.                 //在取数据的时候数据类型一定要取对,否则将抛出异常,like NumberFormatException  
    47.                 System.out.println(cell.getStringCellValue());  
    48.             }  
    49.         }  
    50.         is.close();  
    51.     }  
    52.   
    53. }  

    合并单元格:

    Java代码  收藏代码
    1. public static void main(String args[]) throws IOException {  
    2.         Workbook wb = new HSSFWorkbook();  
    3.         Sheet sheet = wb.createSheet("sheet1");  
    4.         Row row = sheet.createRow(1);  
    5.         Cell cell = row.createCell(1);  
    6.         cell.setCellValue("a test of merge!");  
    7.         //执行合并操作的语句  
    8.         sheet.addMergedRegion(new CellRangeAddress(  
    9.                 1,// 开始行  
    10.                 1,// 结束行  
    11.                 1,// 开始列  
    12.                 3// 结束列  
    13.         ));  
    14.         OutputStream os = new FileOutputStream("file/test3.xls");  
    15.         wb.write(os);  
    16.         os.close();  
    17.     }  

    换行:

    Java代码  收藏代码
    1. public static void main(String args[]) throws IOException {  
    2.         Workbook wb = new HSSFWorkbook();  
    3.         Sheet sheet = wb.createSheet();  
    4.         Row row = sheet.createRow(6);  
    5.         sheet.autoSizeColumn(2);  
    6.         for (int i=0;i<5;i++) {  
    7.             Cell cell = row.createCell(i+2);  
    8.             CellStyle style = wb.createCellStyle();  
    9.             //to set cell newLine should set its wrap true  
    10.             style.setWrapText(true);  
    11.             //利用 来实现换行操作,只有在Cell设置为setWrapText(true)的时候才能实现人为的换行  
    12.             cell.setCellValue("just use   to wrap in a cell!");  
    13.             cell.setCellStyle(style);  
    14.         }  
    15.         OutputStream os = new FileOutputStream("file/test6_newLine.xls");  
    16.         wb.write(os);  
    17.         os.close();  
    18.         System.out.println("----------------------------");  
    19.     }  

    画图:

    Java代码  收藏代码
    1. //drawing shapes  
    2.         /* 
    3.          * To create a shape you have to go through the following steps:  
    4.  
    5.             1.Create the patriarch. 
    6.             2.Create an anchor to position the shape on the sheet. 
    7.             3.Ask the patriarch to create the shape. 
    8.             4.Set the shape type (line, oval, rectangle etc...) 
    9.             5.Set any other style details converning the shape. (eg: line thickness, etc...) 
    10.  
    11.          */  
    12.         HSSFPatriarch partriarch = (HSSFPatriarch) sheet5.createDrawingPatriarch();  
    13.         HSSFSimpleShape shape = partriarch.createSimpleShape(new HSSFClientAnchor(0,0,0,0,(short)3,3,(short)5,5));  
    14.         shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);  
    15.         //shape可以设置很多的属性  
    16.         shape.setFillColor(255,200,200);  
    17.         shape.setLineStyle(HSSFSimpleShape.LINESTYLE_DASHGEL);  
    18.         //Text boxes are created using a different call: 
  • 相关阅读:
    strpos 判断字符串是否存在
    TP 自动验证
    label 标签的用法,点label选中单选、复选框或文本框
    str_replace 替换 小技巧
    数据库文件MDF的空间占满了,没有自动增长是怎么回事?
    (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解
    (4.6)mysql备份还原——深入解析二进制日志(2)binlog参数配置解析
    (1.16)mysql server优化之buffer pool
    COALESCE函数
    linux网络设置和虚拟机克隆转移之后网卡找不到
  • 原文地址:https://www.cnblogs.com/telwanggs/p/4933046.html
Copyright © 2011-2022 走看看