欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

poi导出excel表格

程序员文章站 2024-01-03 21:12:34
...

 

刚入职不到一个月,前几天产品姐让做一个导出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();
			}

		}
	}

 最后结果:

poi导出excel表格

 

 

上一篇:

下一篇: