zoukankan      html  css  js  c++  java
  • Java使用Apache POI进行Excel导入和导出

    Manve依赖
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.5-FINAL</version>
            </dependency>
    1. Apache POI 中常用的类
    HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
    XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
    HWPF - 提供读写Microsoft Word DOC97格式档案的功能。
    XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。
    HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
    HDGF - 提供读Microsoft Visio格式档案的功能。
    HPBF - 提供读Microsoft Publisher格式档案的功能。
    HSMF - 提供读Microsoft Outlook格式档案的功能。
    2.Excel中的工作簿、工作表、行、单元格中的关系:
    一个Excel文件对应于一个workbook(HSSFWorkbook),
    一个workbook可以有多个sheet(HSSFSheet)组成,
    一个sheet是由多个row(HSSFRow)组成,
    一个row是由多个cell(HSSFCell)组成
    3.演示2003和2007版Excel解析(导出)
    //获取文件流
            InputStream inputStream = new FileInputStream("C:\Users\50360\Desktop\hahahhahahh.xlsx");
    
            //创建07版的Workbook  文件格式是xls是03版的 应该使用new HSSFWorkbook
            Workbook workbook = new XSSFWorkbook(inputStream);
    
            //获取第一个Sheet1
            Sheet sheet = workbook.getSheetAt(0);
    
            //获取一个POI的时间日期格式化器
            DataFormatter formatter = new DataFormatter();
    
            //循环遍历Sheet1的每一行
            for (Row row : sheet) {
    
                //遍历Sheet1每一行的每个单元格
                for (Cell cell : row) {
    
                    CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
    
                    //获取这个单元格的坐名称  $A$1
                    System.out.print(cellRef.formatAsString());
                    System.out.print(" - ");
    
                    //通过获取单元格值并应用任何数据格式(Date,0.00,1.23e9,$ 1.23等),获取单元格中显示的文本
                    String text = formatter.formatCellValue(cell);
                    System.out.println(text);
    
                    //获取值并自己格式化
                    switch (cell.getCellType()) {
                        // 字符串型
                        case Cell.CELL_TYPE_STRING:
                            System.out.println(cell.getRichStringCellValue().getString());
                            break;
                        // 数值型
                        case Cell.CELL_TYPE_NUMERIC:
                            // 如果是date类型则 ,获取该cell的date值
                            if (DateUtil.isCellDateFormatted(cell)) {
                                System.out.println(cell.getDateCellValue());
                            } else {// 纯数字
                                System.out.println(cell.getNumericCellValue());
                            }
                            break;
                        // 布尔
                        case Cell.CELL_TYPE_BOOLEAN:
                            System.out.println(cell.getBooleanCellValue());
                            break;
                        // 公式型
                        case Cell.CELL_TYPE_FORMULA:
                            System.out.println(cell.getCellFormula());
                            break;
                        // 空值
                        case Cell.CELL_TYPE_BLANK:
                            System.out.println();
                            break;
                        // 故障
                        case Cell.CELL_TYPE_ERROR:
                            System.out.println();
                            break;
                        default:
                            System.out.println();
                    }
                }
            }
    
        }
    4.Excel2003和2007的新建(导入)
    //新建(导入)Excel方法,isXlsx标记为07版
        public Workbook export(boolean isXlsx) {
            
            //创建一个Excel
            Workbook workbook;
            
            //根据要求创建03或者07版本
            if(isXlsx) {
                workbook = new XSSFWorkbook();
            } else {
                workbook = new HSSFWorkbook();
            }
            
            //创建一个Sheet
            Sheet sheet = workbook.createSheet("My Sheet");
            
            //获取模拟数据
            List<List<String>> content = this.getContent();
            
            //循环遍历将数据填充到Excel中
            for(int i = 0; i < content.size(); i++) {
                Row row = sheet.createRow(i);
                List<String> rowData = content.get(i);
                for(int j  = 0; j < rowData.size(); j++) {
                    row.createCell(j).setCellValue(rowData.get(j));
                }
            }
            return workbook;
        }
        
        //模拟导入的Excel中的数据
        private List<List<String>> getContent() {
            List<List<String>> result = new ArrayList<>();
            List<String> row = new ArrayList<>();
            result.add(row);
            row.add("序号");
            row.add("姓名");
            row.add("年龄");
            row.add("时间");
    
            row = new ArrayList<>();
            result.add(row);
            row.add("1");
            row.add("路人甲");
            row.add("18");
            row.add("2010-01-01");
    
            row = new ArrayList<>();
            result.add(row);
            row.add("2");
            row.add("路人乙");
            row.add("19");
            row.add("2010-01-02");
    
            row = new ArrayList<>();
            result.add(row);
            row.add("3");
            row.add("路人丙");
            row.add("20");
            row.add("2010-01-03");
            return result;
        }
    最后:Apache POI可以操作很多文档,比如word等,当然这里仅仅介绍了Excel常用的导入和导出功能,步骤已经写上备注了。

  • 相关阅读:
    原生js片段
    IE 怪异模式(Quirks Mode)对 HTML 页面的影响
    CSS3 @font-face 的使用
    css面试题——九宫格
    一些前端冷知识
    利用 document.domain 在当前的域名或者基础域名 实现跨域
    JS 判断浏览器客户端类型(ipad,iphone,android)
    防止网站被iframe调用
    doctype 的各种声明
    JQUERY中的事件处理:RETURN FALSE、阻止默认行为、阻止冒泡以及兼容性问题
  • 原文地址:https://www.cnblogs.com/jimisun/p/9424627.html
Copyright © 2011-2022 走看看