Java实现Excel导入导出的步骤详解
Excel导入导出在日常开发中非常常见,Java语言作为一种非常流行的开发语言,在Excel导入导出方面也提供了很好的支持,本文将为大家详细介绍Java实现Excel导入导出的步骤。
相关技术介绍
在Java语言中,常用的Excel导入导出技术有以下几种:
- POI技术:免费的Java API,可以新建表格,也可以读写已有表格,但不支持PDF、EPS等格式。
- easyPOI:基于POI的一个开源组件,具有快速、简单等特点,支持Excel、word、PDF等格式,包括大数据量导出和Excel模板导出等。
- 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技术站