Java操作Excel文件解析与读写方法详解

Java操作Excel文件解析与读写方法详解

Excel文件是一种广泛应用于商业、金融等领域的数据处理工具。在Java开发中,操作Excel文件常常需要通过对Excel文件进行解析读取和写入操作。

Excel文件格式

Excel文件通常有两种常见的格式:xls和xlsx。其中,xls是Excel97-2003版本的二进制文件,而xlsx则是Excel 2007及以上版本所采用的基于XML的文件格式。在Java开发中,操作Excel文件需要根据实际需要选择相应的操作库进行开发。

jar包选择

  • 对于xls格式文件,可以使用Apache POI操作库进行处理。
  • 对于xlsx格式文件,可以使用Java Excel API(jxl)操作库,或者Apache POI中的XSSFWorkbook类进行处理。

解析Excel文件

解析xls格式文件

  • 程序示例:
try {
    File file = new File("sample.xls");
    FileInputStream inputStream = new FileInputStream(file);
    POIFSFileSystem fs = new POIFSFileSystem(inputStream);
    HSSFWorkbook workbook = new HSSFWorkbook(fs);
    HSSFSheet sheet = workbook.getSheetAt(0);
    Iterator<Row> rowIterator = sheet.iterator();
    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_BOOLEAN:
                    System.out.print(cell.getBooleanCellValue() + "\t\t");
                    break;
                case Cell.CELL_TYPE_NUMERIC:
                    System.out.print(cell.getNumericCellValue() + "\t\t");
                    break;
                case Cell.CELL_TYPE_STRING:
                    System.out.print(cell.getStringCellValue() + "\t\t");
                    break;
            }
        }
        System.out.println("");
    }
    workbook.close();
    inputStream.close();
} catch (Exception ex) {
    ex.printStackTrace();
}

解析xlsx格式文件

  • 程序示例:
try {
    File file = new File("sample.xlsx");
    FileInputStream inputStream = new FileInputStream(file);
    XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
    XSSFSheet sheet = workbook.getSheetAt(0);
    Iterator<Row> rowIterator = sheet.iterator();
    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            switch (cell.getCellTypeEnum()) {
                case BOOLEAN:
                    System.out.print(cell.getBooleanCellValue() + "\t\t");
                    break;
                case NUMERIC:
                    System.out.print(cell.getNumericCellValue() + "\t\t");
                    break;
                case STRING:
                    System.out.print(cell.getStringCellValue() + "\t\t");
                    break;
            }
        }
        System.out.println("");
    }
    workbook.close();
    inputStream.close();
} catch (Exception ex) {
    ex.printStackTrace();
}

写入Excel文件

写入xls格式文件

  • 程序示例:
try {
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet("Sample sheet");
    Map<String, Object[]> data = new TreeMap<String, Object[]>();
    data.put("1", new Object[]{"ID", "NAME", "LASTNAME"});
    data.put("2", new Object[]{1, "Tom", "Nickson"});
    data.put("3", new Object[]{2, "Sally", "Brooks"});
    data.put("4", new Object[]{3, "Lisa", "Mayer"});
    Set<String> keyset = data.keySet();
    int rownum = 0;
    for (String key : keyset) {
        Row row = sheet.createRow(rownum++);
        Object[] objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {
            Cell cell = row.createCell(cellnum++);
            if (obj instanceof String)
                cell.setCellValue((String) obj);
            else if (obj instanceof Integer)
                cell.setCellValue((Integer) obj);
        }
    }
    FileOutputStream outputStream = new FileOutputStream("sample.xls");
    workbook.write(outputStream);
    workbook.close();
    outputStream.close();
} catch (Exception ex) {
    ex.printStackTrace();
}

写入xlsx格式文件

  • 程序示例:
try {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Sample sheet");
    Map<String, Object[]> data = new TreeMap<String, Object[]>();
    data.put("1", new Object[]{"ID", "NAME", "LASTNAME"});
    data.put("2", new Object[]{1, "Tom", "Nickson"});
    data.put("3", new Object[]{2, "Sally", "Brooks"});
    data.put("4", new Object[]{3, "Lisa", "Mayer"});
    Set<String> keyset = data.keySet();
    int rownum = 0;
    for (String key : keyset) {
        Row row = sheet.createRow(rownum++);
        Object[] objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {
            Cell cell = row.createCell(cellnum++);
            if (obj instanceof String)
                cell.setCellValue((String) obj);
            else if (obj instanceof Integer)
                cell.setCellValue((Integer) obj);
        }
    }
    FileOutputStream outputStream = new FileOutputStream("sample.xlsx");
    workbook.write(outputStream);
    workbook.close();
    outputStream.close();
} catch (Exception ex) {
    ex.printStackTrace();
}

以上是Java操作Excel文件解析与读写方法的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java操作Excel文件解析与读写方法详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • jsp页面调用applet实现人民币的大小写转换

    下面是jsp页面调用applet实现人民币的大小写转换的完整攻略,包含以下几个步骤: 1. 编写Java Applet代码 Java Applet是一个嵌入到HTML文档中的Java程序,具有跨平台性和安全性。Applet中的代码需继承Applet类,实现init()、paint()等方法。以下是一个简单的Java Applet代码示例,用于实现人民币金额大…

    Java 2023年6月15日
    00
  • 详解Maven JAR包冲突问题排查及解决方案

    首先我们需要了解”Maven JAR包冲突问题”的概念及常见原因。在Maven项目开发中,常常会出现不同版本的同一依赖包引入,导致编译、构建或运行时出现各种奇怪的问题,这就是”Maven JAR包冲突问题”。常见原因包括: 不同依赖模块引入了同一依赖包不同版本。 同一依赖模块引入了不同版本的同一依赖包。 以下是解决”Maven JAR包冲突问题”的四个步骤:…

    Java 2023年5月20日
    00
  • Spring MVC登录注册以及转换json数据

    下面我将为您详细讲解“Spring MVC登录注册以及转换JSON数据”的完整攻略。 1. Spring MVC登录注册 1.1 配置Spring MVC框架 在Spring MVC登录注册流程之前,我们需要先配置好Spring MVC框架,主要包括以下几个步骤: 配置web.xml文件:为DispatcherServlet配置url-pattern,并指定…

    Java 2023年5月26日
    00
  • Java的Struts框架报错“InvalidTokenException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidTokenException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 Token名称错误:如果Token名称不正确,则可能出现此。在这种情况下,需要检查Token名称以解决此问题。 以下是两个实例: …

    Java 2023年5月5日
    00
  • 详解spring security四种实现方式

    我很乐意为你提供关于“详解spring security四种实现方式”的完整攻略。以下是我为你准备的文本: 详解spring security四种实现方式 在本文中,我们将讨论Spring Security的四种实现方式,包括: 基于内存的实现方式 基于JDBC的实现方式 基于LDAP的实现方式 基于自定义实现方式 在接下来的部分,我们将分别深入讨论这四种实…

    Java 2023年5月19日
    00
  • JavaSpringBoot报错“ProcessingException”的原因和处理方法

    原因 “ProcessingException” 错误通常是以下原因引起的: 代码逻辑问题:如果您的代码逻辑存在问题,则可能会出现此错误。在这种情况下,需要检查您的代码逻辑并确保它们正确。 网络连接问题:如果网络连接存在问题,则可能会出现此错误。在这种情况下,需要检查网络连接并确保它们正确。 服务器响应问题:如果服务器响应存在问题,则可能会出现此错误。在这种…

    Java 2023年5月4日
    00
  • 原理分析Java Mybatis中的Mapper

    我来为你详细讲解“原理分析Java Mybatis中的Mapper”的完整攻略。 简介 Mybatis是一种优秀的数据访问层框架,Mapper是Mybatis框架中的重要组成部分。在数据层编程时,Mapper负责将Java实体类与SQL语句相互映射。本文将介绍Mybatis中Mapper的原理和使用方法。 Mapper的原理解析 Mybatis框架将Mapp…

    Java 2023年5月20日
    00
  • 了解JAVA Future类

    了解JAVA Future类的完整攻略 概述 Future类是Java里面可用于异步计算的一种设计模式。该模式依赖于将异步操作提交到执行者(Executor)。简单来说,Future是一个接口,定义了获取异步计算结果的一种方式,不必等待计算完成。 它在Java的java.util.concurrent包中被定义,用于描述异步计算的结果。在执行异步计算时,可以…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部