以下是关于用java实现excel表格导出的示例。其中由于时间关系,没有涉及后台数据库,用的假数据。
package com.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatternFormatting;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
import org.junit.Test;
/**
* 导出excel
*
* @author hwt
*
*/
@SuppressWarnings("deprecation")
public class ExportExcel {
// 首先引入jar包
/*
* <dependency> <groupId>org.apache.poi</groupId>
* <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version>
* </dependency> <dependency> <groupId>org.apache.poi</groupId>
* <artifactId>poi</artifactId> <version>3.17</version> </dependency>
* <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId>
* <version>4.11</version> <scope>test</scope> </dependency>
*/
/**
* 导出excel
*
* @param out
* 输出到哪里
* @param students
* 学生信息
* @param title
* excel中内容标题
* @param headers
* 学生信息表中的头标签
*/
public void exportExcel(OutputStream out,
List<Map<String, Object>> students, String title, String[] headers) {
// 1.创建一个工作簿。
HSSFWorkbook workbook = new HSSFWorkbook();
// 2.创建一个sheet页
HSSFSheet sheet = workbook.createSheet("student-info");
// 3.设置sheet页的列宽
sheet.setDefaultColumnWidth(30);
// 4.解决标题
// 设置标题的样式
HSSFCellStyle titleCellStyle = workbook.createCellStyle();// 创建标题样式
titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 使标题居中
// 设置标题的字体
HSSFFont titleFont = workbook.createFont();
titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titleFont.setFontHeight((short) 8);
titleFont.setFontHeightInPoints((short) 16);
titleFont.setFontName("宋体");
titleFont.setCharSet(HSSFFont.DEFAULT_CHARSET);
// 将字体样式植入样式中
titleCellStyle.setFont(titleFont);
// 设置标题位置
HSSFRow titleRow = sheet.createRow(0);// 第一行
HSSFCell titleCell = titleRow.createCell(0);
// 将标题值和样式放入相应位置
titleCell.setCellValue(title);
titleCell.setCellStyle(titleCellStyle);
// 合并单元格
CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 3);
sheet.addMergedRegion(cra);
// 5.解决表格表头
// 学生统计表的表头
HSSFRow headerRow = sheet.createRow(1);// 第二行
HSSFCell headerCell = null;
// 设置表头样式
HSSFCellStyle headerStyle = workbook.createCellStyle();
headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 设置边框
headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 以下这两种必须搭配使用
headerStyle.setFillForegroundColor(HSSFColor.ORANGE.index);// 填充前景颜色
headerStyle.setFillPattern(HSSFPatternFormatting.SOLID_FOREGROUND);// 填充模式
// 设置表头字体
HSSFFont headerFont = workbook.createFont();
headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
headerFont.setCharSet(HSSFFont.DEFAULT_CHARSET);
headerFont.setColor(HSSFColor.GREEN.index);
headerFont.setFontName("宋体");
headerFont.setFontHeight((short) 6);
headerFont.setFontHeightInPoints((short) 12);
headerStyle.setFont(headerFont);
for (int i = 0; i < headers.length; i++) {
headerCell = headerRow.createCell(i);
headerCell.setCellValue(headers[i]);
headerCell.setCellStyle(headerStyle);
}
// 6.解决表格内容
HSSFRow contentRow = null;
HSSFCell contentCell = null;
HSSFCellStyle contentStyle = workbook.createCellStyle();
contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFFont contentFont = workbook.createFont();
contentFont.setCharSet(HSSFFont.DEFAULT_CHARSET);
contentFont.setFontName("宋体");
contentFont.setFontHeightInPoints((short) 10);
contentStyle.setFont(contentFont);
for (int i = 0; i < students.size(); i++) {
contentRow = sheet.createRow(i + 2);// 第行及其之后行
contentCell = contentRow.createCell(0);
contentCell.setCellValue(students.get(i).get("id").toString());
contentCell.setCellStyle(contentStyle);
contentCell = contentRow.createCell(1);
contentCell.setCellValue(students.get(i).get("name").toString());
contentCell.setCellStyle(contentStyle);
contentCell = contentRow.createCell(2);
contentCell.setCellValue(students.get(i).get("sex").toString());
contentCell.setCellStyle(contentStyle);
contentCell = contentRow.createCell(3);
contentCell.setCellValue(students.get(i).get("age").toString());
contentCell.setCellStyle(contentStyle);
}
try {
// 7.将该工作簿输出到指定目录
workbook.write(out);
// 8.关闭资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public List<Map<String, Object>> getStudents() {
List<Map<String, Object>> students = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
Map<String, Object> map3 = new HashMap<String, Object>();
Map<String, Object> map4 = new HashMap<String, Object>();
Map<String, Object> map5 = new HashMap<String, Object>();
Map<String, Object> map6 = new HashMap<String, Object>();
map1.put("id", 1);
map1.put("name", "张");
map1.put("sex", "男");
map1.put("age", 12);
students.add(map1);
map2.put("id", 2);
map2.put("name", "王五");
map2.put("sex", "男");
map2.put("age", 21);
students.add(map2);
map3.put("id", 3);
map3.put("name", "赵六");
map3.put("sex", "男");
map3.put("age", 15);
students.add(map3);
map4.put("id", 4);
map4.put("name", "晓慧");
map4.put("sex", "女");
map4.put("age", 18);
students.add(map4);
map5.put("id", 5);
map5.put("name", "欢欢");
map5.put("sex", "女");
map5.put("age", 35);
students.add(map5);
map6.put("id", 6);
map6.put("name", "罗罗");
map6.put("sex", "女");
map6.put("age", 56);
students.add(map6);
return students;
}
@Test
public void testExportExcel() {
OutputStream out = null;
try {
File file = new File("D:/" + "student" + ".xls");
if (!file.isDirectory()) {
file.createNewFile();
}
out = new FileOutputStream(file);
} catch (Exception e) {
e.printStackTrace();
}
String[] headers = new String[] { "编号", "姓名", "性别", "年龄" };
exportExcel(out, getStudents(), "学生统计表", headers);
}
}