java实现excel导入导出poi
时间: 2023-05-31 15:18:23 浏览: 203
### 回答1:
Apache POI是一个用于处理和生成Excel文件的Java库。它可以用来读取和写入Microsoft Office格式的文档,包括Word和Excel。
在导入Excel时,可以使用POI的HSSF或XSSF模块读取Excel文件中的数据。
在导出Excel时,可以使用POI的HSSF或XSSF模块创建Excel文件并写入数据。
下面是一个简单的例子,展示了如何使用POI读取Excel文件中的数据:
```java
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.FileInputStream;
public class ReadExcel {
public static void main(String[] args) {
try {
// 创建文件输入流
FileInputStream inputStream = new FileInputStream("example.xls");
// 创建工作簿
Workbook workbook = new HSSFWorkbook(inputStream);
// 获取第一个工作表
Sheet sheet = workbook.getSheetAt(0);
// 遍历行和列
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
for (int cellNum = 0; cellNum < sheet.getRow(rowNum).getLastCellNum(); cellNum++) {
System.out.print(sheet.getRow(rowNum).getCell(cellNum) + " ");
}
System.out.println();
}
// 关闭工作簿
workbook.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
更多关于POI的使用方法可以参考官方文档:https://poi.apache.org/
### 回答2:
Java使用POI(Poor Obfuscation Implementation)库来实现Excel导入导出。POI是一个开源的Java库,提供了操作Microsoft Office格式文件的API。使用POI库可以轻松地读取、写入和编辑Excel文件,包括早期的XLS和现代的XLSX格式。通过POI,开发人员可以轻松地读取和写入大量的数据。在Java中导入和导出Excel文件需要以下步骤:
1. 添加POI库到项目的Classpath中。可以在Maven中添加以下依赖项:
```xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
```
2. 导入Excel文件。
```java
//创建工作簿
Workbook workbook = WorkbookFactory.create(new FileInputStream(new File("file.xlsx")));
//获取工作表
Sheet sheet = workbook.getSheetAt(0);
//获取行数
int rowCount = sheet.getPhysicalNumberOfRows();
//遍历行
for (int i = 0; i < rowCount; i++) {
Row row = sheet.getRow(i);
...
}
```
3. 导出Excel文件。
```java
//创建工作簿
Workbook workbook = new XSSFWorkbook();
//创建工作表
Sheet sheet = workbook.createSheet();
//创建行
Row row = sheet.createRow(0);
//创建单元格
Cell cell = row.createCell(0);
cell.setCellValue("Hello World!");
//将工作簿写入输出流
workbook.write(new FileOutputStream(new File("file.xlsx")));
workbook.close();
```
在导入和导出Excel文件时,POI提供了很多功能,例如格式化单元格、合并单元格、添加公式计算、读取和写入日期等等。开发人员可以根据自己的需要使用这些功能来轻松地处理Excel文件。
### 回答3:
在实际的java开发中,很多时候需要对Excel表格进行操作,如导入数据到数据库或导出报表等。Java提供了很多开源的库来实现这个功能,其中比较著名的就是poi。
poi是一个Apache开源项目,它可以访问和处理Microsoft Office格式的文档,包括Word、Excel和PowerPoint。实现Excel导入导出主要使用的是poi的HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个模块。
一般大家都是以导入为主,因为Excel的导出可以通过模板来实现,但是导入则需要根据Excel中的数据进行数据库的操作,下面我们就来分别讲解一下Java如何通过poi实现Excel导入和导出。
Excel导入
1. 获取Excel文件
在开发中,我们可以选择手动上传Excel文件,或者通过代码将Excel文件下载到本地。如果需要手动上传Excel文件,可以使用常见的表单提交操作来实现。如果需要实现代码下载Excel文件到本地,后端代码可以像下面这样写:
```java
// 文件下载
@RequestMapping("download")
public void download(@RequestParam("fileName") String fileName, HttpServletResponse response) throws Exception {
// 设置文件名
String fileRealName = file_name + ".xls";
// 设置文件路径
String filePath = "/files/";
// 获取输出流
OutputStream os = response.getOutputStream();
// 设置允许下载的文件类型
response.setContentType("application/x-download");
// 设置文件名
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileRealName,"UTF-8"));
// 读取文件流
InputStream inputStream = new FileInputStream(new File(filePath, fileRealName));
// 写文件流到客户端
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
// 关闭流
os.close();
inputStream.close();
}
```
2. 解析Excel文件
解析Excel文件的过程可以分为两步:读取Excel文件,解析Excel数据。读取Excel文件可以使用POI提供的API:WorkbookFactory.create(File file),即可以将Excel文件转化为Workbook对象,进而进行数据的解析。
解析Excel数据的过程需要了解Excel中的数据结构,主要包括三个部分:
- Workbook: 工作簿,一个Excel文件。
- Sheet: 工作表,一个Excel文件中可以包含多个Sheet。
- Row: 行,一个Sheet中有多个行,每一行中又有多个Cell。
```java
// 上传Excel文件
@RequestMapping("upload")
public String upload(@RequestParam("file") MultipartFile file) throws Exception {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件后缀
String extension = fileName.substring(fileName.lastIndexOf("."));
// 判断文件类型
if (!".xls".equals(extension) && !".xlsx".equals(extension)) {
return "文件格式错误";
}
// 以流的方式读取文件,防止文件过大内存溢出
Workbook workbook = WorkbookFactory.create(file.getInputStream());
// 获取sheet数量
int sheetsCount = workbook.getNumberOfSheets();
// 遍历所有的sheet
for (int i = 0; i < sheetsCount; i++) {
Sheet sheet = workbook.getSheetAt(i);
// 获取行数
int rowCount = sheet.getPhysicalNumberOfRows();
// 从第二行开始遍历每一行
for (int j = 1; j < rowCount; j++) {
Row row = sheet.getRow(j);
// 获取单元格中的数据
Cell cell1 = row.getCell(0);
String cell1Value = cell1.getStringCellValue();
Cell cell2 = row.getCell(1);
String cell2Value = cell2.getStringCellValue();
// 将数据插入到数据库
}
}
return "上传成功";
}
```
Excel导出
1. 创建Excel文件
在导出Excel时,要先创建一个Workbook对象,在此对象上创建Sheet对象和Row对象,然后再在Row对象上创建Cell对象,最后将数据写入Cell中。POI提供了两种Workbook对象:HSSFWorkbook(xls格式)和XSSFWorkbook(xlsx格式)。
```java
// 导出Excel文件
@RequestMapping("export")
public String export(HttpServletResponse response) throws Exception {
// 创建一个Workbook
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建Sheet
HSSFSheet sheet = workbook.createSheet("Sheet1");
// 创建第一行(表头)
HSSFRow headerRow = sheet.createRow(0);
HSSFCell cell1 = headerRow.createCell(0);
cell1.setCellValue("序号");
HSSFCell cell2 = headerRow.createCell(1);
cell2.setCellValue("姓名");
// 写入数据
List<User> userList = getUserList();
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
HSSFRow row = sheet.createRow(i + 1);
HSSFCell cell11 = row.createCell(0);
cell11.setCellValue(user.getId());
HSSFCell cell12 = row.createCell(1);
cell12.setCellValue(user.getUsername());
}
// 通过response将生成的Excel文件输出到客户端浏览器
OutputStream outputStream = response.getOutputStream();
response.setContentType("application/binary;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户列表.xls", "UTF-8"));
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
return "导出成功";
}
private List<User> getUserList() {
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setId(1);
user1.setUsername("张三");
userList.add(user1);
User user2 = new User();
user2.setId(2);
user2.setUsername("李四");
userList.add(user2);
User user3 = new User();
user3.setId(3);
user3.setUsername("王五");
userList.add(user3);
return userList;
}
class User {
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
```
需要注意的是,导出Excel时要设置正确的响应头,否则在下载时会出现乱码问题,同时也要注意Excel的格式问题。另外,在实际的开发中,通过Freemarker等模板引擎生成Excel模板,再将数据填充到模板中,可以提高开发效率。
阅读全文
相关推荐












