zoukankan      html  css  js  c++  java
  • java操作Excel简单入门

    简介

    在项目中使用到Excel是很常见的,如批量导入数据,批量导出数据。这里我们使用Apache的开源项目POI来操作Excel。官网

    添加依赖

    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.9</version>
    </dependency>
    

    创建Excel文件

    @AllArgsConstructor
    @NoArgsConstructor
    @Setter
    @Getter
    @ToString
    @Accessors(chain = true)
    public class Person {
    
      private String username;
      private String gender;
      private String address;
    }
    

    定义用户模型

    public class Client {
    
      public static void main(String[] args) throws Exception {
        List<Person> personList = Arrays.asList(
            new Person().setUsername("李四").setGender("男").setAddress("北京"),
            new Person().setUsername("小王").setGender("女").setAddress("上海"));
        //工作簿 表示一个excel文件
        Workbook wb = new SXSSFWorkbook();
        //一个表格
        Sheet sheet = wb.createSheet();
        //创建标题行
        Row row = sheet.createRow(0);
        //1个单元格
        Cell cell = row.createCell(0);
        cell.setCellValue("用户名");
        cell = row.createCell(1);
        cell.setCellValue("性别");
        cell = row.createCell(2);
        cell.setCellValue("地址");
    
        AtomicInteger rowIndex = new AtomicInteger(1);
        for (Person person : personList) {
          //创建数据行
          row = sheet.createRow(rowIndex.getAndIncrement());
          row.createCell(0).setCellValue(person.getUsername());
          row.createCell(1).setCellValue(person.getGender());
          row.createCell(2).setCellValue(person.getAddress());
        }
        wb.write(new FileOutputStream("D:\person.xlsx"));
      }
    }
    

    生成的Excel如下

    Workbook在POI中有3种实现,

    • HSSFWorkbook,适用于2003及之前的版本,后缀为.xls,行数最多为65536行
    • XSSFWorkbook,适用于2007及之后的版本,后缀为.xlsx,行数最多为1048576行,可能出现OutOfMemoryError错误
    • SXSSFWorkbook,适用于大型Excel文件的操作,不会造成内存溢出,基本原理就是空间换时间,将数据保存到硬盘中

    可以看到两种版本的行大小和列大小


    可以看到,在创建行对象之前都会校验最大行数。
    SXSSFWorkbook会使用很低的内存,这是因为超过100行的数据都会保存到临时文件中

    临时文件中内容为

    读取Excel文件

    public class Client {
    
      public static void main(String[] args) throws Exception {
    
        Workbook wb = new XSSFWorkbook(new FileInputStream("D:\person.xlsx"));
        Sheet sheet = wb.getSheetAt(0);
        Iterator<Row> rowIterator = sheet.iterator();
        //过滤标题行
        rowIterator.next();
        List<Person> personList = new ArrayList<>();
        while (rowIterator.hasNext()) {
          Row row = rowIterator.next();
          Person person = new Person();
          Cell cell;
          cell = row.getCell(0);
          if (cell != null) {
            person.setUsername(cell.getStringCellValue());
          }
          cell = row.getCell(1);
          if (cell != null) {
            person.setGender(cell.getStringCellValue());
          }
          cell = row.getCell(2);
          if (cell != null) {
            person.setAddress(cell.getStringCellValue());
          }
          personList.add(person);
        }
        System.out.println(personList);
      }
    
    }
    

    可以看到,使用POI操作Excel还是很简单的,关于更加复杂的Excel功能,请读者自行研究。

  • 相关阅读:
    js数组
    关于编程,程序员的一些语录
    css心得
    js函数
    一些电脑基础知识
    gnome3安装
    C学习小记
    ubuntu重装系统后
    elinks文字浏览器
    快捷方式
  • 原文地址:https://www.cnblogs.com/strongmore/p/14105754.html
Copyright © 2011-2022 走看看