总体步骤
- 创建一个工作簿.
- 创建sheet表(在某个工作簿中创建,可创建多个).
- 创建行(在sheet中创建).
- 创建单元格(在行中创建).
- 填充单元格的值.
- 重复3,4,5的步骤填充数据.
- 保存到本地文件或者对该文件做其他处理.
相关说明
如果看不懂我所写的总体步骤,那么就需要了解一下excel的相关概念:excel是一个文件,那么这个文件就是一个工作簿,而一个工作簿下有很多的表(这些表就是sheet),一个表下有多行多列多个单元格.
代码展示
创建一个含有两个sheet表的excel.
maven依赖
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
代码展示
- data.java
package com.data;
import java.util.HashMap;
import java.util.Map;
public class Data {
class User{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public Map getUserData(){
Map map = new HashMap();
for (int i = 1; i < 20; i++) {
User user = new User(i+"--user", i+20);
map.put(i, user);
}
return map;
}
}
- Data2Excel.java
package com.data;
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
public class Data2Excel {
public static void main(String[] args) throws IOException {
new Data2Excel().export();
}
public void export() throws IOException {
Data data = new Data();
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet1 = workbook.createSheet("用户信息");
// 可以在同一个工作簿下创建多个sheet表
// HSSFSheet sheet2 = workbook.createSheet("用户详情2");
// HSSFSheet sheet3 = workbook.createSheet("用户详情3");
// 在sheet1中创建一行标题
createScanTitle(workbook, sheet1);
// 对sheet1中填充数据
fillUserData(workbook, sheet1, data.getUserData());
// 保存工作簿到本地
save2file(workbook);
}
/**
* 创建表头的工具
* @param workbook
* @param sheet
*/
private void createScanTitle(HSSFWorkbook workbook, HSSFSheet sheet){
HSSFRow row = sheet.createRow(0);
sheet.setColumnWidth(1,12*256);
sheet.setColumnWidth(3,17*256);
//设置为居中加粗
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setFont(font);
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("编号");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("姓名");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("年龄");
cell.setCellStyle(style);
}
/**
* 填充数据
*/
private void fillUserData(HSSFWorkbook workbook, HSSFSheet sheet, Map<Integer, Data.User> userMap){
// 编号从1开始,excel中的行是从0开始算的,所以这里就是非程序员的第二行
for (int id:userMap.keySet()){
HSSFRow row = sheet.createRow(id);
// 编号
row.createCell(0).setCellValue(id);
// 姓名
row.createCell(1).setCellValue(userMap.get(id).getName());
// 年龄
row.createCell(2).setCellValue(userMap.get(id).getAge());
}
}
/**
* 把文件保存下来
* @param workbook
*/
private void save2file(HSSFWorkbook workbook) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("详情.xls");
workbook.write(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
}
}
执行Data2Excel.java
在当前项目的路径下可以得到一个excel文件,效果如下: