Java - Poi 操作 Excel

Java - Poi 操作 Excel

关注 “弋凡”(YiFan)微信公众号吧 记录简单笔记 做你的最爱

  • 注意

    • XSSFWorkbook 对象是操作 .xlsx 格式的表格
    • HSSFWorkbook 对象是操作 .xls 格式的表格
    • xls格式 <= 65536 行
    • xlsx格式 > 65536 行
  • 导入pom文件

<!--  .xlsx格式  7版本-->
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.2</version>
  </dependency>
<!-- 日期格式化工具!-->
  <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.10.1</version>
  </dependency>
  • 写入数据

public static void main(String[] args) throws Exception {
     

        String PATH = "E:/IDEA_Project/hzmv/";

        // 创建一个 Excel
        Workbook workbook = new XSSFWorkbook();
        // 创建一个工作表
        Sheet sheet = workbook.createSheet("HZMV~数据源");
        // 创建一行
        Row row1 = sheet.createRow(0);
        // 创建一个单元格  (1,1)
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("链接");
        //(1,2)
        Cell cell2 = row1.createCell(1);
        cell2.setCellValue("格式");

        // 创建一行
        Row row2 = sheet.createRow(1);
        Cell cell3 = row2.createCell(0);
        String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell3.setCellValue(time);

        // 生成一张表(io流)
        FileOutputStream stream = new FileOutputStream(PATH + "hzmv数据源.xlsx");
        workbook.write(stream);
        stream.close();
        System.err.println("hzmv数据源生产完毕~");
    }
   
  • 读取数据

public static void main(String[] args) throws Exception {
     
    String PATH = "E:/IDEA_Project/hzmv/";
    // 获取文件流
    FileInputStream inputStream = new FileInputStream(PATH + "hzmv数据源.xlsx");
    //  创建一个工作簿 execl能使用的操作 这里都能使用
    Workbook workbook = new XSSFWorkbook(inputStream);
    // 拿到第一个表
    Sheet sheetAt = workbook.getSheetAt(0);
    System.err.println(sheetAt);
    // 拿到第行
    Row row1 = sheetAt.getRow(0);
    //拿到第一个单元格
    Cell cell1 = row1.getCell(1);
    // 读取的时候一定要注意数据类型
    /*
    *    getStringCellValue  字符串类型
    *    getNumericCellValue  数字类型
    * */
    System.err.println(cell1.getStringCellValue());
}
  • 读取数据及判断数据类型 *

public static void main(String[] args) throws Exception {
     
    String PATH = "E:/IDEA_Project/hzmv/";
    // 获取文件流
    FileInputStream inputStream = new FileInputStream(PATH + "hzmv数据源.xlsx");
    //  创建一个工作簿 execl能使用的操作 这里都能使用
    Workbook workbook = new XSSFWorkbook(inputStream);
    // 拿到第一个表
    Sheet sheetAt = workbook.getSheetAt(0);
    // 获取标题内容
    Row rowTit = sheetAt.getRow(0);
    if(rowTit != null ){
     
        // 得到所有的列~
        int cellCount = rowTit.getPhysicalNumberOfCells();
        // 遍历
        for (int cellnum = 0; cellnum < cellCount ; cellnum++) {
     
            // 得到单元格
            Cell cell = rowTit.getCell(cellnum);
            if(cell  != null ){
     
                CellType cellType = cell.getCellType();
                String cellValue = "";

                switch (cellType){
     
                    case _NONE:
                        break;
                    case NUMERIC:
                        cellValue = String.valueOf(cell.getNumericCellValue());
                        break;
                    case STRING :
                        cellValue = cell.getStringCellValue();
                        break;
                    case FORMULA:
                        break;
                    case BLANK:
                        break;
                    case BOOLEAN:
                        cellValue = String.valueOf(cell.getBooleanCellValue());
                        break;
                    case ERROR:
                        break;
                }
                System.err.print(cellValue+"->"+cellType+"   | ");
            }
        }
    }
    System.err.println();
    // 获取表中的内容
    int rowCount = sheetAt.getPhysicalNumberOfRows();
    for (int rownum = 1; rownum < rowCount ; rownum++) {
     
        Row rowData  = sheetAt.getRow(rownum);
        if(rowData != null){
     
            // 得到所有的列
            int cellCount = rowData.getPhysicalNumberOfCells();
            for (int cellnum = 0; cellnum < cellCount ; cellnum++) {
     
                // 得到每个单元格
                Cell cell = rowData.getCell(cellnum);
                if(cell != null ){
     
                    // 得到每个单元格的数据的类型~
                    CellType cellType = cell.getCellType();
                    String cellValue = "";
                    switch (cellType){
     
                        case _NONE:
                            cellValue= "null";
                            break;
                        case NUMERIC:
                            // 日期
                            if(DateUtil.isCellDateFormatted(cell)){
     
                                Date value = cell.getDateCellValue();
                                cellValue = new DateTime(value).toString("yyyy-MM-dd HH:mm:ss");
                                break;
                            }else {
     
                                cellValue = String.valueOf(cell.getNumericCellValue());
                                break;
                            }
                        case STRING :
                            cellValue = cell.getStringCellValue();
                            break;
                        case FORMULA:
                            break;
                        case BLANK:
                            cellValue= "null";
                            break;
                        case BOOLEAN:
                            cellValue = String.valueOf(cell.getBooleanCellValue());
                            break;
                        case ERROR:
                            cellValue= "error";
                            break;
                    }
                    System.err.print(cellValue+"->"+cellType+"   | ");
                }
            }
            System.err.println();
        }
    }
    inputStream.close();
}

  • 运行效果图

在这里插入图片描述

  • 数据内容

在这里插入图片描述

快来关注“弋凡”微信公众号吧

快来关注“弋凡”微信公众号把

你可能感兴趣的:(java,excel,poi)