zoukankan      html  css  js  c++  java
  • 一脸懵逼学习Java操作Excel之POI(Apache POI)

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

    1:下面简单的程序来创建一个空白Microsoft Excel工作簿。

    请记住一定要引入jar包,切记:http://poi.apache.org/download.html

    如:poi-3.9-20121203.jar

     1 package com.bie;
     2 
     3 import java.io.FileOutputStream;
     4 import java.io.IOException;
     5 
     6 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     7 import org.apache.poi.ss.usermodel.Workbook;
     8 
     9 /**
    10  * 
    11  * @author biexiansheng
    12  *
    13  */
    14 public class PoiTest {
    15 
    16     public static void main(String[] args) throws IOException {
    17         //创建一个空的工作簿
    18         Workbook wb = new HSSFWorkbook();
    19         //创建输出流
    20         FileOutputStream fos = new FileOutputStream("c:\poi.xlsx");
    21         //写入到流中,创建这个excel文件
    22         wb.write(fos);
    23         //关闭流
    24         fos.close();
    25         
    26     }
    27 }

     2:创建一个excel,然后插入一些数据测试一下;

     1 package com.bie;
     2 
     3 import java.io.FileOutputStream;
     4 import java.io.IOException;
     5 import java.util.Calendar;
     6 import java.util.Date;
     7 
     8 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     9 import org.apache.poi.ss.usermodel.Cell;
    10 import org.apache.poi.ss.usermodel.CellStyle;
    11 import org.apache.poi.ss.usermodel.CreationHelper;
    12 import org.apache.poi.ss.usermodel.Row;
    13 import org.apache.poi.ss.usermodel.Sheet;
    14 import org.apache.poi.ss.usermodel.Workbook;
    15 
    16 /**
    17  * 
    18  * @author biexiansheng
    19  *
    20  */
    21 public class PoiTest {
    22 
    23     public static void main(String[] args) throws IOException {
    24         //创建一个空的工作簿
    25         Workbook wb = new HSSFWorkbook();
    26         //创建sheet页
    27         Sheet sheet1 = wb.createSheet("第一个sheet页");
    28         wb.createSheet("第二个sheet页");
    29         //创建一个行
    30         Row createRow = sheet1.createRow(0);
    31         //创建一个单元格,第一列
    32         Cell createCell = createRow.createCell(0);
    33         createCell.setCellValue("编号");
    34         //创建一个单元格,第二列,然后对此单元格进行赋值
    35         createRow.createCell(1).setCellValue("姓名");
    36         //创建一个单元格,第三列,然后对此单元格进行赋值
    37         createRow.createCell(2).setCellValue("年龄");
    38         //创建一个单元格,第四列,然后对此单元格进行赋值
    39         createRow.createCell(3).setCellValue("性别");
    40         //创建一个单元格,第五列,然后对此单元格进行赋值
    41         createRow.createCell(4).setCellValue("生日");
    42             
    43         //创建第二行
    44         Row createRow2 = sheet1.createRow(1);
    45         //创建单元格,然后对单元格进行赋值
    46         createRow2.createCell(0).setCellValue("10010");
    47         createRow2.createCell(1).setCellValue("张三");
    48         createRow2.createCell(2).setCellValue("15");
    49         createRow2.createCell(3).setCellValue("男");
    50         
    51         //设置时间格式
    52         //创建一个单元格的样式,单元格样式类
    53         CellStyle cellStyle = wb.createCellStyle();
    54         CreationHelper creationHelper = wb.getCreationHelper();
    55         //格式化日期
    56         cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
    57         //得到这个单元格,用于赋值和设置单元格的格式
    58         //第一种方法:
    59         Cell createCell2 = createRow2.createCell(4);
    60         createCell2.setCellValue(new Date());
    61         createCell2.setCellStyle(cellStyle);
    62         
    63         //第二种方法:
    64         //Cell createCell3 = createRow2.createCell(4);
    65         //createCell3.setCellValue(Calendar.getInstance());
    66         //createCell3.setCellStyle(cellStyle);
    67         
    68         
    69         //创建输出流
    70         FileOutputStream fos = new FileOutputStream("c:\poi.xlsx");
    71         //写入到流中,创建这个excel文件
    72         wb.write(fos);
    73         //关闭流
    74         fos.close();
    75         
    76     }
    77 }

     可以看到excel里面的数据内容如下所示:

     3:创建一个时间格式的单元格

    package com.bie;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Date;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.CreationHelper;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    
    /**
     * 
     * @author biexiansheng
     *
     */
    public class PoiTest {
    
        public static void main(String[] args) throws IOException {
            //创建一个空的工作簿
            Workbook wb = new HSSFWorkbook();
            //创建sheet页
            Sheet sheet1 = wb.createSheet("第一个sheet页");
            wb.createSheet("第二个sheet页");
            //创建一个行
            Row createRow = sheet1.createRow(0);
            //创建一个单元格,第一列
            Cell createCell = createRow.createCell(0);
            createCell.setCellValue("编号");
            //创建一个单元格,第二列,然后对此单元格进行赋值
            createRow.createCell(1).setCellValue("姓名");
            //创建一个单元格,第三列,然后对此单元格进行赋值
            createRow.createCell(2).setCellValue("年龄");
            //创建一个单元格,第四列,然后对此单元格进行赋值
            createRow.createCell(3).setCellValue("性别");
            //创建一个单元格,第五列,然后对此单元格进行赋值
            createRow.createCell(4).setCellValue("生日");
                
            //创建第二行
            Row createRow2 = sheet1.createRow(1);
            //创建单元格,然后对单元格进行赋值
            createRow2.createCell(0).setCellValue("10010");
            createRow2.createCell(1).setCellValue("张三");
            createRow2.createCell(2).setCellValue("15");
            createRow2.createCell(3).setCellValue("男");
            
            //设置时间格式
            //创建一个单元格的样式,单元格样式类
            CellStyle cellStyle = wb.createCellStyle();
            CreationHelper creationHelper = wb.getCreationHelper();
            //格式化日期
            cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
            //得到这个单元格,用于赋值和设置单元格的格式
            Cell createCell2 = createRow2.createCell(4);
            createCell2.setCellValue(new Date());
            createCell2.setCellStyle(cellStyle);
            
            
            //创建输出流
            FileOutputStream fos = new FileOutputStream("c:\poi.xlsx");
            //写入到流中,创建这个excel文件
            wb.write(fos);
            //关闭流
            fos.close();
            
        }
    }

    运行效果如下所示:

     4:遍历工作簿的行和列并且获取单元格内容

     1 package com.bie;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import java.util.Calendar;
     7 import java.util.Date;
     8 
     9 import org.apache.poi.hssf.usermodel.HSSFCell;
    10 import org.apache.poi.hssf.usermodel.HSSFRow;
    11 import org.apache.poi.hssf.usermodel.HSSFSheet;
    12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    13 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    14 import org.apache.poi.ss.usermodel.Cell;
    15 import org.apache.poi.ss.usermodel.CellStyle;
    16 import org.apache.poi.ss.usermodel.CreationHelper;
    17 import org.apache.poi.ss.usermodel.Row;
    18 import org.apache.poi.ss.usermodel.Sheet;
    19 import org.apache.poi.ss.usermodel.Workbook;
    20 
    21 /**
    22  * 
    23  * @author biexiansheng
    24  *
    25  */
    26 public class PoiTest2 {
    27 
    28     public static void main(String[] args) throws IOException {
    29         FileInputStream fis = new FileInputStream("c:\poi.xlsx");
    30         //接受输入流
    31         POIFSFileSystem pfs = new POIFSFileSystem(fis);
    32         //创建一个工作簿
    33         HSSFWorkbook hwb = new HSSFWorkbook(pfs);
    34         //获取第一个sheet页
    35         HSSFSheet sheetAt = hwb.getSheetAt(0);
    36         if(sheetAt == null){
    37             return ;
    38         }
    39         
    40         //遍历行里面的单元格内容.
    41         for(int i =0; i<=sheetAt.getLastRowNum(); i++){
    42             //得到每一行
    43             HSSFRow row = sheetAt.getRow(i);
    44             //如果为空就跳出
    45             if(row == null){
    46                 continue;
    47             }
    48             //遍历列
    49             for(int j=0; j<row.getLastCellNum(); j++){
    50                 //遍历列里面的内容
    51                 HSSFCell cell = row.getCell(j);
    52                 if(cell == null){
    53                     continue;
    54                 }
    55                 //输出列里面的内容
    56                 System.out.print(" " + cell);
    57             }
    58             System.out.println();
    59         }
    60     }
    61     
    62     
    63     public static String getValue(HSSFCell cell){
    64         if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){
    65             return String.valueOf(cell.getBooleanCellValue());
    66         }else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
    67             return String.valueOf(cell.getNumericCellValue());
    68         }else{
    69             return String.valueOf(HSSFCell.CELL_TYPE_STRING);
    70         }
    71     }
    72     
    73 }

    运行效果如下所示:

    5:文本提取

     1 package com.bie;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import java.util.Calendar;
     7 import java.util.Date;
     8 
     9 import org.apache.poi.hssf.extractor.ExcelExtractor;
    10 import org.apache.poi.hssf.usermodel.HSSFCell;
    11 import org.apache.poi.hssf.usermodel.HSSFRow;
    12 import org.apache.poi.hssf.usermodel.HSSFSheet;
    13 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    14 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    15 import org.apache.poi.ss.usermodel.Cell;
    16 import org.apache.poi.ss.usermodel.CellStyle;
    17 import org.apache.poi.ss.usermodel.CreationHelper;
    18 import org.apache.poi.ss.usermodel.Row;
    19 import org.apache.poi.ss.usermodel.Sheet;
    20 import org.apache.poi.ss.usermodel.Workbook;
    21 
    22 /**
    23  * 
    24  * @author biexiansheng
    25  *
    26  */
    27 public class PoiTest3 {
    28 
    29     public static void main(String[] args) throws IOException {
    30         FileInputStream fis = new FileInputStream("c:\poi.xlsx");
    31         //接受输入流
    32         POIFSFileSystem pfs = new POIFSFileSystem(fis);
    33         //创建一个工作簿
    34         HSSFWorkbook hwb = new HSSFWorkbook(pfs);
    35         //获取第一个sheet页
    36         HSSFSheet sheetAt = hwb.getSheetAt(0);
    37         if(sheetAt == null){
    38             return ;
    39         }
    40         //文本抽取
    41         ExcelExtractor excelExtractor = new ExcelExtractor(hwb);
    42         System.out.println(excelExtractor.getText());
    43     }
    44     
    45 }

    运行效果如下所示://不要sheet的名称
     excelExtractor.setIncludeSheetNames(false);

     6:单元格对齐方式,单元格边框处理,单元格填充色和颜色操作,单元格合并

      1 package com.bie;
      2 
      3 import java.io.FileOutputStream;
      4 import java.io.IOException;
      5 
      6 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
      7 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
      8 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
      9 import org.apache.poi.ss.usermodel.Cell;
     10 import org.apache.poi.ss.usermodel.CellStyle;
     11 import org.apache.poi.ss.usermodel.IndexedColors;
     12 import org.apache.poi.ss.usermodel.Row;
     13 import org.apache.poi.ss.usermodel.Sheet;
     14 import org.apache.poi.ss.usermodel.Workbook;
     15 import org.apache.poi.ss.util.CellRangeAddress;
     16 
     17 /** 
     18 * @author  Author:别先生 
     19 * @date Date:2017年9月9日 上午10:14:31 
     20 *
     21 *
     22 */
     23 public class PoiTest {
     24 
     25     /***
     26      * 创建一个单元格并为其设定指定的对齐方式
     27      * @param wb 工作簿
     28      * @param row 行
     29      * @param column 列
     30      * @param halign 水平对齐的方式
     31      * @param valign 垂直对齐的方式
     32      */
     33     private static void createCell(Workbook wb,Row row,short column,short halign,short valign){
     34         //创建单元格
     35         Cell cell = row.createCell(column);
     36         //设置单元格的值
     37         cell.setCellValue(new HSSFRichTextString("测试内容"));
     38         //创建单元格的样式
     39         CellStyle cellStyle = wb.createCellStyle();
     40         //设置单元格水平对齐方式
     41         cellStyle.setAlignment(halign);
     42         //设置单元格垂直对齐方式
     43         cellStyle.setVerticalAlignment(valign);
     44         
     45         //设置边框线和颜色
     46         //底部边框
     47         cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
     48         //底部颜色
     49         cellStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex());
     50         
     51         //左边边框
     52         cellStyle.setBorderLeft(CellStyle.BORDER_DASH_DOT);
     53         //左边颜色
     54         cellStyle.setBottomBorderColor(IndexedColors.RED.getIndex());
     55         
     56         //右边边框
     57         cellStyle.setRightBorderColor(CellStyle.ALIGN_FILL);
     58         //右边边框颜色
     59         cellStyle.setBottomBorderColor(IndexedColors.DARK_YELLOW.getIndex());
     60         
     61         //顶部边框
     62         cellStyle.setBorderTop(CellStyle.BORDER_DOTTED);
     63         //顶部颜色
     64         cellStyle.setTopBorderColor(IndexedColors.AUTOMATIC.getIndex());
     65         
     66         //设置单元格填充色和颜色操作
     67         //设置背景颜色
     68         cellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex());
     69         cellStyle.setFillPattern(CellStyle.BIG_SPOTS);
     70         //设置前景颜色
     71         cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
     72         cellStyle.setFillPattern(CellStyle.BIG_SPOTS);
     73         
     74         //设置单元格的样式
     75         cell.setCellStyle(cellStyle);
     76     }
     77     
     78     public static void main(String[] args) throws IOException {
     79         //定义一个工作簿
     80         Workbook wb =new HSSFWorkbook();
     81         //创建第一个sheet页
     82         Sheet createSheet = wb.createSheet("第一个sheet");
     83         //创建第一行
     84         Row createRow = createSheet.createRow(0);
     85         createRow.setHeightInPoints(30);
     86         
     87         //调用工具方法,创建单元格
     88         //单元格的对齐方式的调用和使用
     89         createCell(wb, createRow, (short)0, HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_BOTTOM);;
     90         createCell(wb, createRow, (short)1, HSSFCellStyle.ALIGN_LEFT, HSSFCellStyle.VERTICAL_CENTER);;
     91         createCell(wb, createRow, (short)2, HSSFCellStyle.ALIGN_RIGHT, HSSFCellStyle.VERTICAL_TOP);;
     92         createCell(wb, createRow, (short)3, HSSFCellStyle.ALIGN_JUSTIFY, HSSFCellStyle.VERTICAL_JUSTIFY);;
     93         
     94         
     95         //创建单元格
     96         //创建第3行
     97         Row createRow2 = createSheet.createRow(2);
     98         createRow.setHeightInPoints(30);
     99         //创建第一列和第二列
    100         Cell createCell = createRow2.createCell(0);
    101         createCell.setCellValue("单元格合并1");
    102         
    103         Cell createCell2 = createRow2.createCell(1);
    104         createCell2.setCellValue("单元格合并2");
    105         
    106         //单元格合并,起始行,结束行,起始列,结束列
    107         createSheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 3));
    108         
    109         
    110         //创建输出流
    111         FileOutputStream fos = new FileOutputStream("d:\poi.xlsx");
    112         //将内容写到excel文件中
    113         wb.write(fos);
    114         //关闭流
    115         fos.close();
    116     }
    117     
    118 }

    演示效果如下所示:

     7:字体处理的单元格

     1 package com.bie;
     2 
     3 import java.io.FileOutputStream;
     4 import java.io.IOException;
     5 
     6 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     7 import org.apache.poi.ss.usermodel.Cell;
     8 import org.apache.poi.ss.usermodel.CellStyle;
     9 import org.apache.poi.ss.usermodel.Font;
    10 import org.apache.poi.ss.usermodel.Row;
    11 import org.apache.poi.ss.usermodel.Sheet;
    12 import org.apache.poi.ss.usermodel.Workbook;
    13 import org.apache.poi.ss.util.CellRangeAddress;
    14 
    15 /** 
    16 * @author  Author:别先生 
    17 * @date Date:2017年9月9日 上午10:14:31 
    18 *
    19 *
    20 */
    21 public class PoiTest2 {
    22 
    23     
    24     public static void main(String[] args) throws IOException {
    25         //定义一个工作簿
    26         Workbook wb =new HSSFWorkbook();
    27         //创建第一个sheet页
    28         Sheet createSheet = wb.createSheet("第一个sheet");
    29         //创建第一行
    30         Row createRow = createSheet.createRow(0);
    31         
    32         //创建一个字体处理类
    33         Font createFont = wb.createFont();
    34         createFont.setFontHeightInPoints((short)25);
    35         createFont.setFontName("Courier New");
    36         createFont.setItalic(true);
    37         createFont.setStrikeout(true);
    38         
    39         CellStyle createCellStyle = wb.createCellStyle();
    40         createCellStyle.setFont(createFont);
    41         
    42         //创建单元格
    43         Cell createCell = createRow.createCell((short)1);
    44         createCell.setCellValue("这是一个字体设计的单元格");
    45         createCell.setCellStyle(createCellStyle);
    46         
    47         //创建输出流
    48         FileOutputStream fos = new FileOutputStream("d:\poi.xlsx");
    49         //将内容写到excel文件中
    50         wb.write(fos);
    51         //关闭流
    52         fos.close();
    53     }
    54     
    55 }

    演示效果如下所示:

    8:读取和重写工作簿

     1 package com.bie;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 
     7 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     8 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     9 import org.apache.poi.ss.usermodel.Cell;
    10 import org.apache.poi.ss.usermodel.Row;
    11 import org.apache.poi.ss.usermodel.Sheet;
    12 import org.apache.poi.ss.usermodel.Workbook;
    13 
    14 /** 
    15 * @author  Author:别先生 
    16 * @date Date:2017年9月9日 上午10:14:31 
    17 *
    18 *
    19 */
    20 public class PoiTest3 {
    21 
    22     
    23     public static void main(String[] args) throws IOException {
    24         //创建输入流
    25         FileInputStream fis = new FileInputStream("d:\poi.xlsx");
    26         //将获取到文件流放到内存中
    27         POIFSFileSystem pfs = new POIFSFileSystem(fis);
    28         //创建一个工作簿
    29         Workbook wb = new HSSFWorkbook(pfs);
    30         //获取第一个sheet页
    31         Sheet sheetAt = wb.getSheetAt(0);
    32         //获取第6行
    33         Row row = sheetAt.getRow(5);
    34         //获取第六个单元格
    35         Cell cell = row.getCell(0);
    36         if(cell == null){
    37             cell = row.createCell(3);
    38         }
    39         cell.setCellType(Cell.CELL_TYPE_STRING);
    40         cell.setCellValue("测试单元格");
    41         
    42         
    43         //创建输出流
    44         FileOutputStream fos = new FileOutputStream("d:\poi.xlsx");
    45         //将内容写到excel文件中
    46         wb.write(fos);
    47         //关闭流
    48         fos.close();
    49         fis.close();
    50     }
    51     
    52 }

    演示效果如下所示:

     9:poi操作单元格换行操作:

     1 package com.bie;
     2 
     3 import java.io.FileOutputStream;
     4 import java.io.IOException;
     5 
     6 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
     7 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
     8 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     9 import org.apache.poi.ss.usermodel.Cell;
    10 import org.apache.poi.ss.usermodel.CellStyle;
    11 import org.apache.poi.ss.usermodel.IndexedColors;
    12 import org.apache.poi.ss.usermodel.Row;
    13 import org.apache.poi.ss.usermodel.Sheet;
    14 import org.apache.poi.ss.usermodel.Workbook;
    15 import org.apache.poi.ss.util.CellRangeAddress;
    16 
    17 /** 
    18 * @author  Author:别先生 
    19 * @date Date:2017年9月9日 上午10:14:31 
    20 *
    21 *
    22 */
    23 public class PoiTest4 {
    24 
    25     
    26     public static void main(String[] args) throws IOException {
    27         //定义一个工作簿
    28         Workbook wb =new HSSFWorkbook();
    29         //创建第一个sheet页
    30         Sheet createSheet = wb.createSheet("第一个sheet");
    31         //创建第一行
    32         Row createRow = createSheet.createRow(0);
    33         //创建单元格
    34         Cell createCell = createRow.createCell(2);
    35         createCell.setCellValue("我要换行
     are you ok !!!!");
    36         
    37         //设置样式
    38         CellStyle cs = wb.createCellStyle();
    39         //设置可以换行
    40         cs.setWrapText(true);
    41         createCell.setCellStyle(cs);
    42         
    43         //调整一下行的高度
    44         createRow.setHeightInPoints(2 * createSheet.getDefaultRowHeightInPoints());
    45         //调整单元格的宽度
    46         createSheet.autoSizeColumn(2);
    47         
    48         //创建输出流
    49         FileOutputStream fos = new FileOutputStream("d:\poi.xlsx");
    50         //将内容写到excel文件中
    51         wb.write(fos);
    52         //关闭流
    53         fos.close();
    54     }
    55     
    56 }

    演示效果如下所示:

  • 相关阅读:
    Hadoop集群(三) Hbase搭建
    Hadoop集群(二) HDFS搭建
    Hadoop集群(一) Zookeeper搭建
    Redis Cluster 添加/删除 完整折腾步骤
    Redis Cluster在线迁移
    Hadoop分布式HA的安装部署
    Describe the difference between repeater, bridge and router.
    what is the “handover” and "soft handover" in mobile communication system?
    The main roles of LTE eNodeB.
    The architecture of LTE network.
  • 原文地址:https://www.cnblogs.com/honglikeji/p/7531270.html
Copyright © 2011-2022 走看看