poi导出excel表格

刚入职不到一个月,前几天产品姐让做一个导出excel表格到的功能。以前在学校从来没有接触过,一脸懵逼。但是任务得完成啊。就从网上查java导出excel怎么做,然后就找到了poi。

首先,去apache官网下载poi使用的jar包。

代码如下:

util方法:

package com.mx.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Export {

	public void export(String fileName, List<String> header1, List<String> header2, List<Map<String, Object>> listmap,
			List<Map<String, Object>> jyqmap, OutputStream out) {

		// 声明一个工作簿
		HSSFWorkbook wb = new HSSFWorkbook();
		// 生成一个表格
		HSSFSheet sheet = wb.createSheet(fileName);

		// 生成表格的第一行
		// 第一行表头
		HSSFRow row = sheet.createRow(0);
		for (int i = 0; i < header1.size(); i++) {
			sheet.autoSizeColumn(i, true);// 根据字段长度自动调整列的宽度
			HSSFCell cell = row.createCell(i);
			cell.setCellValue(header1.get(i));
			if (i >= 0 && i < header1.size()) {
				for (int j = 0; j < header1.size(); j++) {
					// 从第j列开始填充
					cell = row.createCell(j);
					cell.setCellValue(header1.get(j));
				}
			}
		}

		// 第二行表头
		row = sheet.createRow(1);
		for (int i = 0; i < header2.size(); i++) {
			sheet.autoSizeColumn(i, true);// 自动调整宽度
			HSSFCell cell = row.createCell(i + 3);
			cell.setCellValue(header2.get(i));
			if (i >= 2 && i <= 18) {
				for (int j = 0; j < header2.size(); j++) {
					// 从第j+1列开始填充
					cell = row.createCell(j + 3);
					cell.setCellValue(header2.get(j));
				}
			}
		}

		// 第三行数据
		Iterator<Map<String, Object>> data = listmap.iterator();// 总记录的迭代器
		Iterator<Map<String, Object>> jyq = jyqmap.iterator();// 建设期的迭代器
		int i = 0;
		int j = 0;
		int m = 3;
		while (data.hasNext()) {
			Map<String, Object> mapTemp = data.next();// 拿到一条记录
			row = sheet.createRow(i + 2);// 从第三行填数据
			Iterator<String> bt1 = header1.iterator();// 迭代第一行表头
			while (bt1.hasNext()) {// 第一行表头有值,进行操作
				String bt1Str = bt1.next();// 表头一字段的暂存
				HSSFCell cell = row.createCell(j);// 创建列
				cell.setCellValue((String) mapTemp.get(bt1Str));// 导入对应列的数据
				j++;
			}
			i++;// 移动行
		}
		while (jyq.hasNext()) {
			Map<String, Object> jyqData = jyq.next();// 拿到一条经营期记录
			row = sheet.createRow(j + 2);// 从第三行填数据
			Iterator<String> bt2 = header2.iterator();// 迭代第二行表头
			while (bt2.hasNext()) {// 有值,进行操作
				String bt2Str = bt2.next();// 表头二字段的暂存
				HSSFCell cell = row.createCell(m);
				cell.setCellValue((String) jyqData.get(bt2Str));
				m++;
			}
			j++;// 移动行
		}
		try {
			wb.write(out);
			out.close();
			System.out.println("导出成功!");
		} catch (FileNotFoundException e) {
			System.out.println("导出失败!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("导出失败!");
			e.printStackTrace();
		}
	}
}

service层: 

/**
	 * 导出表格
	 * 
	 * @param planPro
	 */

	public void excel(HttpServletResponse response, ProjectPlan planPro) {
		String fileName = "投资计划与资金筹措表" + ".xls";
		// 进行查询并导出
		List<ProjectPlan> list = this.getProFinanceDataList(planPro);
		int jyq = (Integer) this.getDao().queryForObject(NAMESPACE + "selJyqCount", planPro);
		// 第一行表头
		List<String> header1 = new ArrayList<String>();
		header1.add("序号");
		header1.add("项目");
		header1.add("合计");
		header1.add("建设期");
		// 第二行头
		List<String> header2 = new ArrayList<String>();
		for (int i = 1; i < jyq + 1; i++) {
			header2.add("第" + i + "年");
		}

		if (list != null && list.size() > 0) {// 查询的数据不为空就对数据进行导出
			List<Map<String, Object>> listmap = new ArrayList<>();
			List<Map<String, Object>> jyqmap = new ArrayList<>();
			JSONObject json;
			for (ProjectPlan r : list) {// 循环每一条数据
				Map<String, Object> mapZ = new HashMap<>();
				mapZ.put("序号", r.getSerialXh());
				mapZ.put("项目", r.getXmmc());
				mapZ.put("合计", r.getSumData());
				mapZ.put("建设期", "");
				json = JSONObject.fromObject(r);
				Map<String, Object> mapF = new HashMap<>();
				for (int i = 1; i < jyq + 1; i++) {
					mapF.put(header2.get(i - 1), json.get("jsq" + i));
				}

				// 数据添加到excel表格
				listmap.add(mapZ);
				jyqmap.add(mapF);
			}
			// 使用流将数据导出
			OutputStream out = null;
			try {
				// 防止中文乱码
				String headStr = "attachment; filename=\"" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + "\"";
				response.setContentType("octets/stream");
				response.setContentType("APPLICATION/OCTET-STREAM");
				response.setHeader("Content-Disposition", headStr);
				out = response.getOutputStream();
				Export exportUtil = new Export();
				exportUtil.export(fileName, header1, header2, listmap, jyqmap, out);
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
	}

 最后结果:

猜你喜欢

转载自blog.csdn.net/hscch/article/details/81540367