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 }

    演示效果如下所示:

  • 相关阅读:
    select,epoll,poll比较(网络资源总结)
    c++(重载、覆盖、隐藏)
    TCP状态转换图
    TCP心跳 | TCP keepAlive
    回车、换行、空格的ASCII码值—(附ASCII码表)
    C++ dlopen mini HOWTO 一篇非常好的介绍
    shell十三问
    linux IPC消息队列 的内核限制
    C++ string 类常用函数
    const用法的解惑
  • 原文地址:https://www.cnblogs.com/honglikeji/p/7531270.html
Copyright © 2011-2022 走看看