Java实现Excel导入导出的步骤详解

yizhihongxing

Java实现Excel导入导出的步骤详解

Excel导入导出在日常开发中非常常见,Java语言作为一种非常流行的开发语言,在Excel导入导出方面也提供了很好的支持,本文将为大家详细介绍Java实现Excel导入导出的步骤。

相关技术介绍

在Java语言中,常用的Excel导入导出技术有以下几种:

  1. POI技术:免费的Java API,可以新建表格,也可以读写已有表格,但不支持PDF、EPS等格式。
  2. easyPOI:基于POI的一个开源组件,具有快速、简单等特点,支持Excel、word、PDF等格式,包括大数据量导出和Excel模板导出等。
  3. JXL技术:基于Java的Excel API,提供了读取、写入、Sheet、Workbook等基本操作。

本文将以POI技术为例进行介绍。

导入Excel步骤

在Java中使用POI技术进行Excel导入有以下步骤:

1. 导入相关jar包

首先需要在项目中导入POI的相关jar包,比如:poi-4.1.2.jar、poi-ooxml-4.1.2.jar、poi-ooxml-schemas-4.1.2.jar、xmlbeans-3.1.0.jar。

2. 新建工作簿

在Java中可以使用HSSFWorkbook来创建一个工作簿,对应于一个Excel文件。

HSSFWorkbook workbook = new HSSFWorkbook();

3. 新建工作表

使用HSSFWorkbook的createSheet方法来创建一个工作表。

HSSFSheet sheet = workbook.createSheet("Sheet1");

4. 读取Excel文件

使用HSSFWorkbook的构造方法读取一个已存在的Excel文件。

InputStream is = new FileInputStream("D:\\test.xls");
HSSFWorkbook workbook = new HSSFWorkbook(is);

5. 读取工作表内容

使用HSSFSheet的getRow和getCell方法来读取工作表中的内容。

HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell(0);
String value = cell.getStringCellValue();

其中,getRow和getCell方法的参数是数字索引,代表行和列的位置,从0开始计数。

示例说明1:使用POI技术读取Excel文件并将数据插入MySQL数据库

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class ImportExcel {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<Student>();
        try {
            // 读取Excel文件
            InputStream is = new FileInputStream("D:\\student.xls");
            Workbook workbook = new HSSFWorkbook(is);
            Sheet sheet = workbook.getSheetAt(0);
            int rows = sheet.getLastRowNum();
            // 循环读取表格数据
            for (int i = 1; i <= rows; i++) {
                Row row = sheet.getRow(i);
                if (row == null) {
                    continue;
                }
                // 读取单元格数据
                row.getCell(0).setCellType(CellType.STRING);
                String id = row.getCell(0).getStringCellValue();
                String name = row.getCell(1).getStringCellValue();
                int gender = (int) row.getCell(2).getNumericCellValue();
                row.getCell(3).setCellType(CellType.STRING);
                String phone = row.getCell(3).getStringCellValue();
                // 将数据封装为对象存入集合
                Student student = new Student(id, name, gender, phone);
                list.add(student);
            }
            // 插入MySQL数据库
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC", "root", "root");
            conn.setAutoCommit(false);
            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(id, name, gender, phone) VALUES (?, ?, ?, ?)");
            for (Student student : list) {
                pstmt.setString(1, student.getId());
                pstmt.setString(2, student.getName());
                pstmt.setInt(3, student.getGender());
                pstmt.setString(4, student.getPhone());
                pstmt.executeUpdate();
            }
            pstmt.close();
            conn.commit();
            conn.close();
            System.out.println("导入成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

示例说明2:使用POI技术读取Excel文件并展示在Web页面中

package com.example.demo.controller;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class ExcelController {

    @RequestMapping(value = "/excel", method = RequestMethod.GET)
    public String excel(HttpServletRequest request, HttpServletResponse response, Model model) {
        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
        try {
            // 读取Excel文件
            InputStream is = new FileInputStream("D:\\student.xls");
            Workbook workbook = new HSSFWorkbook(is);
            Sheet sheet = workbook.getSheetAt(0);
            int rows = sheet.getLastRowNum();
            int cols = sheet.getRow(0).getLastCellNum();
            // 循环读取表格数据
            for (int i = 0; i <= rows; i++) {
                Row row = sheet.getRow(i);
                if (row == null) {
                    continue;
                }
                // 读取单元格数据
                for (int j = 0; j < cols; j++) {
                    row.getCell(j).setCellType(CellType.STRING);
                    String cellValue = row.getCell(j).getStringCellValue();
                    model.addAttribute("cell" + j, cellValue);
                }
                model.addAttribute("row" + i, i);
            }
            return "excel";
        } catch (IOException e) {
            e.printStackTrace();
            return "error";
        }
    }
}

导出Excel步骤

在Java中使用POI技术进行Excel导出有以下步骤:

1. 导入相关jar包

同样需要在项目中导入POI的相关jar包。

2. 新建工作簿和工作表

同导入过程。

3. 插入数据

使用HSSFRow的createCell方法创建一个单元格,并使用setCellValue方法插入数据。

HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue("hello");

4. 设置格式

使用HSSFCellStyle来设置单元格格式。

HSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); // 设置背景颜色
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(style); // 应用格式

5. 输出Excel文件

使用FileOutputStream将工作簿写入到一个文件中。

FileOutputStream fos = new FileOutputStream("D:\\test.xls");
workbook.write(fos);
fos.close();

示例说明3:使用POI技术从MySQL数据库中读取数据并将其导出为Excel文件

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExportExcel {
    public static void main(String[] args) {
        try {
            // 创建Excel工作簿
            Workbook workbook = new HSSFWorkbook();
            // 创建Excel工作表
            Sheet sheet = workbook.createSheet("Sheet1");
            // 设置列宽
            sheet.setColumnWidth(0, 256 * 20);
            sheet.setColumnWidth(1, 256 * 20);
            sheet.setColumnWidth(2, 256 * 20);
            sheet.setColumnWidth(3, 256 * 20);
            // 读取数据库
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC", "root", "root");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student");
            // 插入表头
            HSSFCell cell = sheet.createRow(0).createCell(0);
            cell.setCellValue("学生信息表");
            HSSFCellStyle style = workbook.createCellStyle();
            style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
            style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
            style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); // 设置背景颜色
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cell.setCellStyle(style); // 应用格式
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
            // 插入表头行
            sheet.createRow(1).createCell(0).setCellValue("学号");
            sheet.getRow(1).createCell(1).setCellValue("姓名");
            sheet.getRow(1).createCell(2).setCellValue("性别");
            sheet.getRow(1).createCell(3).setCellValue("电话");
            // 插入数据
            int rownum = 2;
            while (rs.next()) {
                String id = rs.getString("id");
                String name = rs.getString("name");
                int gender = rs.getInt("gender");
                String phone = rs.getString("phone");
                sheet.createRow(rownum).createCell(0).setCellValue(id);
                sheet.getRow(rownum).createCell(1).setCellValue(name);
                sheet.getRow(rownum).createCell(2).setCellValue(gender);
                sheet.getRow(rownum).createCell(3).setCellValue(phone);
                rownum++;
            }
            // 输出Excel
            FileOutputStream fos = new FileOutputStream("D:\\student.xls");
            workbook.write(fos);
            fos.close();
            System.out.println("导出成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

总结

以上就是Java实现Excel导入导出的步骤详解以及相关示例。需要注意的是,POI技术在读取Excel文件时也会读取格式信息,因此如果文件过大会比较慢。此外,在使用POI技术时也应注意相关API的改动,避免在API变化时因版本不对应而出现问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现Excel导入导出的步骤详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • JavaSpringBoot报错“ClientErrorException”的原因和处理方法

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

    Java 2023年5月4日
    00
  • vue cli3.0结合echarts3.0与地图的使用方法示例

    下面是关于“vue cli 3.0结合echarts 3.0与地图的使用方法示例”的完整攻略。 步骤一:创建基于vue-cli3.0的工程 Vue CLI是一个基于vue.js的全新工具,用于快速构建vue.js项目,它提供了:node命令行交互工具、快速原型开发、自动代码规范检测、构建和部署功能等。 详细步骤: 确保你已经安装了Node.js,命令行输入n…

    Java 2023年6月15日
    00
  • spring boot整合spring-kafka实现发送接收消息实例代码

    下面我将为您详细讲解spring boot整合spring-kafka实现发送接收消息的攻略。 一、集成Spring-Kafka依赖 在pom.xml文件中添加spring-kafka的依赖: <dependency> <groupId>org.springframework.kafka</groupId> <art…

    Java 2023年5月20日
    00
  • 盘点几种常见的java排序算法

    盘点几种常见的Java排序算法 排序算法是程序员日常开发中经常使用的基本算法之一。Java是目前最流行的编程语言之一,因此掌握Java的排序算法对于程序员来说是必须的。 本篇文章将会介绍几种Java常见的排序算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序和计数排序,一步步讲解其中的实现原理和Java代码实现。 冒泡排序 冒泡排序是一种基本…

    Java 2023年5月19日
    00
  • java中对象的比较equal、Comparble、Comparator的区别

    Java 中对象之间的比较涉及多种方法,其中包括 equals、Comparable 和 Comparator。这些方法都有不同的作用和用途,下面将分别进行详细讲解。 一、equals方法 equals 方法是 Object 类中的方法,所有 Java 类都继承了它。默认情况下,Object 的 equals 方法只比较两个对象是否是同一个对象。如果我们需要…

    Java 2023年5月26日
    00
  • Spark SQL常见4种数据源详解

    Spark SQL常见4种数据源详解 Spark SQL是一个强大的分布式数据处理引擎,可以对多种数据源进行处理。本文将重点讲解Spark SQL常见的4种数据源,包括Hive、JSON、Parquet和JDBC,并附带示例说明。 1. Hive Hive是Hadoop的数据仓库,Spark可以使用Hive的数据进行处理。为了使用Hive,请按照以下步骤: …

    Java 2023年6月16日
    00
  • Java异常体系非正常停止和分类

    Java 异常体系是指在执行 Java 程序时所发生的异常情况。Java 程序在运行时可能会遇到各种各样的异常情况,比如空指针异常、数组下标越界异常、文件不存在异常等。这些异常情况可能会导致程序出现非正常停止的情况,因此了解 Java 异常体系非常重要。 Java 异常体系的分类 Java 异常体系分为两大类:可检查异常和不可检查异常。 可检查异常是指那些在…

    Java 2023年5月27日
    00
  • Java实现简单汽车租赁系统

    Java实现简单汽车租赁系统的完整攻略 系统需求分析 该汽车租赁系统应该具备以下功能: 显示当前的租赁车辆列表 租客可以查询所需汽车类型的库存量 租客可以租车,并计算租车天数、费用等信息 车辆归还,更新库存 系统设计 类的设计-属性和方法 Car(汽车类) 属性: carType:汽车类型 carId:汽车编号 carPrice:汽车租金(元/天) isRe…

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