Controller层代码:前端将id拼接成“idList”,传入后台。

 @RequestMapping("settle/provinceSettlement/downloadProvince.do")
    public void downloadProvince(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
        setRequestModelMap(request, model);
        String idString =  request.getParameter("idList");
        Map<String, Object> resultMap = new HashMap<String, Object>();
        List<Integer> idList = new ArrayList<Integer>();
        // 接收数据库的查询出的数据
        List<ProvinceSettlementVO> provinceSettlementVOList = new ArrayList<ProvinceSettlementVO>();

        if(idString != null && idString != "") {
            List<String> idListString = Arrays.asList(idString.split(","));
            try {
                for (String id : idListString) {
                    if (id != null) {
                        idList.add(Integer.valueOf(id));
                    }

                }
            } catch (Exception e) {
                log.error("downloadProvince", e);
                resultMap.put("msg", "idConversionError");
                AjaxResponseUtil.returnData(response, "json", resultMap);
            }
            // 查询出的list
            provinceSettlementVOList = provinceSettlementService.selectListById(idList);

        }

        String folderName = DateUtil.date2Str(new java.util.Date(), "yyyyMMddHHmmss");
        // 任意fileDir名字,此处用到ParamInfoCache
        String fileDir = ParamInfoCache.get("[email protected]_UP_DIR")+folderName;

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = null;
        sheet = wb.createSheet("集团结算报表(省结算表)");
        ProvinceSettlementExportExcel.getProvinceSettlementExportExcel(wb,sheet,provinceSettlementVOList);

        String excelName = DateUtil.date2Str(new java.util.Date(), "yyyyMMddHHmmss");
         // 生成excel文件
		SettleGroupUtil.outputExcel(wb, fileDir+"/"+excelName+".xls");
		SettleGroupUtil.exportExcel(wb, response, request, excelName);
    }

dataUtil中的date2Str

public static String date2Str(Date date, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}

 

ProvinceSettlementExportExcel类
package xxx.utils;

import xxx.entity.ProvinceSettlementVO;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.CellStyle;

import java.util.ArrayList;
import java.util.List;

public class ProvinceSettlementExportExcel {
    static final float COMPARE_ZREO = 0.000001F;
    public static void getProvinceSettlementExportExcel(HSSFWorkbook wb,
                                                    HSSFSheet sheet, List<ProvinceSettlementVO> list) {
        PoolSettleExportExcelUtils exportExcel = new PoolSettleExportExcelUtils(
                wb, sheet);

        // 创建列标头LIST
        List<String> fialList = new ArrayList<String>();
        fialList.add("序号");
        fialList.add("省份");
        fialList.add("结算账期");
        fialList.add("应结算金额");
        fialList.add("调整金额");
        fialList.add("实际结算金额");
        fialList.add("");
        fialList.add("");
        // 计算该报表的列数
        int number = fialList.size();

        List<String> fialList2 = new ArrayList<String>();

        fialList2.add("");
        fialList2.add("");
        fialList2.add("");
        fialList2.add("");
        fialList2.add("");
        fialList2.add("价款");
        fialList2.add("税款");
        fialList2.add("价税合计");
        // 给工作表列定义列宽(实际应用自己更改列数)
        for (int i = 0; i < number; i++) {
            sheet.setColumnWidth(i, 4000);
        }

        // 创建单元格样式
        HSSFCellStyle cellStyle = wb.createCellStyle();

        // 指定单元格居中对齐
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        // 指定单元格垂直居中对齐
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

        // 指定当单元格内容显示不下时自动换行
        cellStyle.setWrapText(true);

        cellStyle.setBorderLeft(CellStyle.BORDER_MEDIUM);
        cellStyle.setBorderBottom(CellStyle.BORDER_MEDIUM);
        cellStyle.setBorderRight(CellStyle.BORDER_MEDIUM);
        cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM);

        // 设置单元格字体
        HSSFFont font = wb.createFont();
        // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setFontName("仿宋_GB2312");
        font.setFontHeight((short) 240);
        cellStyle.setFont(font);

        HSSFRow row2 = sheet.createRow(0);
        // 设置行高
        row2.setHeight((short) 1500);

        HSSFCell row2Cell = null;

        // 创建不同的LIST的列标题
        for (int i = 0; i < number; i++) {
            row2Cell = row2.createCell(i);
            row2Cell.setCellStyle(cellStyle);
            row2Cell.setCellValue(new HSSFRichTextString(fialList.get(i)
                    .toString()));
        }
        // 合并单元格
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 5, 7));

        HSSFCell row3Cell = null;
        HSSFRow row3 = sheet.createRow(1);
        row3.setHeight((short) 800);
        for (int i = 0; i < number; i++) {
            row3Cell = row3.createCell(i);
            row3Cell.setCellStyle(cellStyle);
            row3Cell.setCellValue(new HSSFRichTextString(fialList2.get(i)
                    .toString()));
        }

        // 合并单元格
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2));
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3));
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4));


        List<List<Object>> list2 = new ArrayList<List<Object>>();
        // DecimalFormat df = new DecimalFormat("0.00");
        for (ProvinceSettlementVO provinceSettlementVO : list) {
            List<Object> p = new ArrayList<Object>();
            p.add(provinceSettlementVO.getId());
            p.add(provinceSettlementVO.getProvinceName());
            p.add(provinceSettlementVO.getPaymentDays());
            p.add(provinceSettlementVO.getSettlementAmount());
            p.add(provinceSettlementVO.getAdjustmentAmount());
            p.add(provinceSettlementVO.getCostAmount());
            p.add(provinceSettlementVO.getTaxAmount());
            p.add(provinceSettlementVO.getFactSettlementAmount());
            list2.add(p);
        }

        HSSFCell rowkCell = null;
        int k = 1;
        for (List<Object> list3 : list2) {
            HSSFRow rowk = sheet.createRow(1 + k);
            rowk.setHeight((short) 450); // 其他的略低
            for (int i = 0; i < number; i++) {
                rowkCell = rowk.createCell(i);
                // rowkCell.setCellType(HSSFCell.CELL_TYPE_STRING);
                rowkCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                HSSFDataFormat hSSFDataFormat = wb.createDataFormat();
                cellStyle.setDataFormat(hSSFDataFormat.getFormat("0.00")); // 把数字格式化为
                // 带两位小数的模式
                if (list3.get(i) instanceof Double) {
                    rowkCell.setCellValue((Double) list3.get(i));
                } else {
                    rowkCell.setCellValue(new HSSFRichTextString(String
                            .valueOf(list3.get(i))));
                }
                rowkCell.setCellStyle(cellStyle);
            }
            k++;
        }

    }
}

 PoolSettleExportExcelUtils 类

package xxx.common.utils;

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.HSSFRichTextString;
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.HSSFColor;
import org.apache.poi.hssf.util.Region;

//font.setFontHeight((short) 320);   // 20大小 excel   20倍
@SuppressWarnings("deprecation")
public class PoolSettleExportExcelUtils {
	
	private HSSFWorkbook wb = null;

	private HSSFSheet sheet = null;

	public PoolSettleExportExcelUtils(HSSFWorkbook wb, HSSFSheet sheet) {
		super();
		this.wb = wb;
		this.sheet = sheet;
	}

	public HSSFSheet getSheet() {
		return sheet;
	}

	public void setSheet(HSSFSheet sheet) {
		this.sheet = sheet;
	}

	public HSSFWorkbook getWb() {
		return wb;
	}

	public void setWb(HSSFWorkbook wb) {
		this.wb = wb;
	}

	/**
	 * 创建通用EXCEL头部
	 * 
	 * @param headString
	 *            头部显示的字符
	 * @param colSum
	 *            该报表的列数
	 */
	public void createNormalHead(String headString, int colSum) {

		HSSFRow row = sheet.createRow(0);

		// 设置第一行
		HSSFCell cell = row.createCell(0);
		row.setHeight((short) 800);

		// 定义单元格为字符串类型
		cell.setCellType(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(new HSSFRichTextString(headString));

		// 指定合并区域
		sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) colSum));

		HSSFCellStyle cellStyle = wb.createCellStyle();

		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
		cellStyle.setWrapText(false);// 指定单元格自动换行

		// 设置单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("仿宋_GB2312");
		font.setFontHeight((short) 320);   // 20大小 excel   20倍
		cellStyle.setFont(font);
		cellStyle.setWrapText(false);// 指定单元格自动换行

		cell.setCellStyle(cellStyle);
	}

	/**
	 * 创建通用报表第二行
	 * 
	 * @param params
	 *            统计条件数组
	 * @param colSum
	 *            需要合并到的列索引
	 */
	public void createNormalTwoRow(String params, int colSum) {
		HSSFRow row1 = sheet.createRow(1);
		row1.setHeight((short) 500);

		HSSFCell cell2 = row1.createCell(0);

		cell2.setCellType(HSSFCell.ENCODING_UTF_16);
		cell2.setCellValue(new HSSFRichTextString(params));

		// 指定合并区域
		sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) colSum));

		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); // 指定单元格居中对齐
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
		cellStyle.setWrapText(false);// 指定单元格自动换行

		// 设置单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("仿宋_GB2312");
		font.setFontHeight((short) 240);
		cellStyle.setFont(font);

		cell2.setCellStyle(cellStyle);

	}

	/**
	 * 设置报表标题
	 * 
	 * @param columHeader
	 *            标题字符串数组
	 */
	public void createColumHeader(String[] columHeader) {

		// 设置列头
		HSSFRow row2 = sheet.createRow(2);

		// 指定行高
		row2.setHeight((short) 600);

		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
		cellStyle.setWrapText(true);// 指定单元格自动换行

		// 单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("仿宋_GB2312");
		font.setFontHeight((short) 250);
		cellStyle.setFont(font);

		/*
		 * cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单无格的边框为粗体
		 * cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.
		 * cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		 * cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
		 * cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
		 * cellStyle.setRightBorderColor(HSSFColor.BLACK.index);
		 * cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
		 * cellStyle.setTopBorderColor(HSSFColor.BLACK.index);
		 */

		// 设置单元格背景色
		cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

		HSSFCell cell3 = null;

		for (int i = 0; i < columHeader.length; i++) {
			cell3 = row2.createCell(i);
			cell3.setCellType(HSSFCell.ENCODING_UTF_16);
			cell3.setCellStyle(cellStyle);
			cell3.setCellValue(new HSSFRichTextString(columHeader[i]));
		}

	}

	/**
	 * 创建内容单元格
	 * 
	 * @param wb
	 *            HSSFWorkbook
	 * @param row
	 *            HSSFRow
	 * @param col
	 *            short型的列索引
	 * @param align
	 *            对齐方式
	 * @param val
	 *            列值
	 */
	public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align,
			String val) {
		HSSFCell cell = row.createCell(col);
		cell.setCellType(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(new HSSFRichTextString(val));
		HSSFCellStyle cellstyle = wb.createCellStyle();
		cellstyle.setAlignment(align);
		cell.setCellStyle(cellstyle);
	}

	/**
	 * 创建合计行
	 * 
	 * @param colSum
	 *            需要合并到的列索引
	 * @param cellValue
	 */
	public void createLastSumRow(int colSum, String[] cellValue) {

		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
		cellStyle.setWrapText(true);// 指定单元格自动换行

		// 单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("仿宋_GB2312");
		font.setFontHeight((short) 250);
		cellStyle.setFont(font);

		HSSFRow lastRow = sheet.createRow((short) (sheet.getLastRowNum() + 1));
		HSSFCell sumCell = lastRow.createCell(0);

		sumCell.setCellValue(new HSSFRichTextString("合计"));
		sumCell.setCellStyle(cellStyle);
		sheet.addMergedRegion(new Region(sheet.getLastRowNum(), (short) 0,
				sheet.getLastRowNum(), (short) colSum));// 指定合并区域

		for (int i = 2; i < (cellValue.length + 2); i++) {
			sumCell = lastRow.createCell(i);
			sumCell.setCellStyle(cellStyle);
			sumCell.setCellValue(new HSSFRichTextString(cellValue[i - 2]));

		}

	}
	
}

 

// 生成excel文件
SettleGroupUtil.outputExcel
package xxx.common.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipOutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import org.apache.log4j.Logger;

import com.opensymphony.oscache.util.StringUtil;

/**
 * @Descrption: 集团报表类
 * @author turner
 * @time 2014-1-5 下午3:11:45
 * @version:
 * @Copyright:
 */
public final class SettleGroupUtil {

	static final float COMPARE_ZERO = 0.000001F;

	private static Logger log = Logger.getLogger(SettleGroupUtil.class);

	/**
	 * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。
	 * 
	 * @param sourceFilePath
	 *            待压缩的文件路径
	 * @param zipFilePath
	 *            压缩后存放路径
	 * @param fileName
	 *            压缩后文件的名称
	 * @return flag
	 */
	public static boolean fileToZip(String sourceFilePath, String zipFilePath,
			String fileName) {
		boolean flag = false;
		File sourceFile = new File(sourceFilePath);
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		ZipOutputStream zos = null;

		if (sourceFile.exists() == false) {
			log.info(sourceFilePath + "is not exist");
		} else {
			try {
				File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
				if (zipFile.exists()) {
					log.info(zipFilePath + " exists:" + fileName + ".zip"
							+ " file.");
				} else {
					File[] sourceFiles = sourceFile.listFiles();
					if (null == sourceFiles || sourceFiles.length < 1) {
						log.info(sourceFilePath
								+ " not exists file. no need to uncompress.");
					} else {
						fos = new FileOutputStream(zipFile);
						zos = new ZipOutputStream(new BufferedOutputStream(fos));
						zos.setEncoding("GBK");
						byte[] bufs = new byte[1024 * 10];
						for (int i = 0; i < sourceFiles.length; i++) {
							// 创建ZIP实体,并添加进压缩包
							ZipEntry zipEntry = new ZipEntry(
									sourceFiles[i].getName());
							zipEntry.setUnixMode(644);
							zos.putNextEntry(zipEntry);
							// 读取待压缩的文件并写进压缩包里
							fis = new FileInputStream(sourceFiles[i]);
							bis = new BufferedInputStream(fis, 1024 * 10);
							int read = 0;
							while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
								zos.write(bufs, 0, read);
							}
						}
						flag = true;
					}
				}
			} catch (FileNotFoundException e) {
				log.error("", e);
			} catch (IOException e) {
				log.error("", e);
			} finally {
				// 关闭流
				try {
					if (null != bis)
						bis.close();
					if (null != zos)
						zos.close();
				} catch (IOException e) {
					log.error("", e);
				}
			}
		}

		return flag;
	}

	public static String date2String(Date date) {
		SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
		return sf.format(date);
	}

	/**
	 * @desc: copy file from here to there.
	 * @param src
	 * @param dst
	 */
	public static void copyFile(String src, String dst) {
		BufferedWriter bufferedWriter = null;
		BufferedReader bufferedReader = null;
		try {
			bufferedWriter = new BufferedWriter(new FileWriter(dst));
			bufferedReader = new BufferedReader(new FileReader(src));
			String read = new String();
			while ((read = bufferedReader.readLine()) != null) {
				bufferedWriter.write(read + "\r\n");
				// bufferedWriter.newLine();
			}
			bufferedWriter.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (bufferedWriter != null) {
				try {
					bufferedWriter.close();
				} catch (Exception e1) {
					log.error("", e1);
				}
			}
			if (bufferedReader != null) {
				try {
					bufferedReader.close();
				} catch (Exception e2) {
					log.error("", e2);
				}
			}
		}
	}

	public static void copyFileNew(String oldPath, String newPath) {
		InputStream inStream = null;
		FileOutputStream fs = null;
		try {
			int bytesum = 0;
			int byteread = 0;
			File oldfile = new File(oldPath);
			if (oldfile.exists()) { // 文件存在时
				inStream = new FileInputStream(oldPath); // 读入原文件
				fs = new FileOutputStream(newPath);
				byte[] buffer = new byte[1444];
				int length;
				while ((byteread = inStream.read(buffer)) != -1) {
					bytesum += byteread; // 字节数 文件大小
					// System.out.println(bytesum);
					fs.write(buffer, 0, byteread);
				}
				fs.flush();
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		} finally {

			try {
				if (inStream != null)
					inStream.close();
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
			try {
				if (fs != null)
					fs.close();
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
		}
	}

	/**
	 * 递归查找文件
	 * 
	 * @param baseDirName
	 *            查找的文件夹路径
	 * @param targetFileName
	 *            需要查找的文件名
	 * @param fileList
	 *            查找到的文件集合
	 */
	public static void findFiles(String baseDirName, String targetFileName,
			List fileList) {
		/**
		 * 算法简述: 从某个给定的需查找的文件夹出发,搜索该文件夹的所有子文件夹及文件,
		 * 若为文件,则进行匹配,匹配成功则加入结果集,若为子文件夹,则进队列。 队列不空,重复上述操作,队列为空,程序结束,返回结果。
		 */
		String tempName = null;
		// 判断目录是否存在
		File baseDir = new File(baseDirName);
		if (!baseDir.exists() || !baseDir.isDirectory()) {
			log.info("find file fail:" + baseDirName + " is not the directory.");
		} else {
			String[] filelist = baseDir.list();
			for (int i = 0; i < filelist.length; i++) {
				File readfile = new File(baseDirName + "/" + filelist[i]); // WINDOWS
																			// 为\\
				// System.out.println(readfile.getAbsolutePath());
				if (!readfile.isDirectory()) {
					tempName = readfile.getName();
					if (SettleGroupUtil.wildcardMatch(targetFileName, tempName)) {
						// 匹配成功,将文件名添加到结果集
						fileList.add(readfile.getAbsoluteFile());
					}
				} else if (readfile.isDirectory()) {
					findFiles(baseDirName + "/" + filelist[i], targetFileName,
							fileList);
				}
			}
		}
	}

	/**
	 * 通配符匹配
	 * 
	 * @param pattern
	 *            通配符模式
	 * @param str
	 *            待匹配的字符串
	 * @return 匹配成功则返回true,否则返回false
	 */
	private static boolean wildcardMatch(String pattern, String str) {
		int patternLength = pattern.length();
		int strLength = str.length();
		int strIndex = 0;
		char ch;
		for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {
			ch = pattern.charAt(patternIndex);
			if (ch == '*') {
				// 通配符星号*表示可以匹配任意多个字符
				while (strIndex < strLength) {
					if (wildcardMatch(pattern.substring(patternIndex + 1),
							str.substring(strIndex))) {
						return true;
					}
					strIndex++;
				}
			} else if (ch == '?') {
				// 通配符问号?表示匹配任意一个字符
				strIndex++;
				if (strIndex > strLength) {
					// 表示str中已经没有字符匹配?了。
					return false;
				}
			} else {
				if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {
					return false;
				}
				strIndex++;
			}
		}
		return (strIndex == strLength);
	}

	/**
	 * 生成excel文件
	 * 
	 * @param wb
	 * @param fileName
	 */
	public static void outputExcel(HSSFWorkbook wb, String fileName) {
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(new File(fileName));
			wb.write(fos);
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 流方式输入EXCEL文件
	 * 
	 * @param fileName
	 *            文件名
	 */

	public static void exportExcel(HSSFWorkbook wb,
			HttpServletResponse response, HttpServletRequest request,
			String excelName) {
		OutputStream fOut = null;
		try {
			response.setCharacterEncoding("UTF-8");
			response.setContentType("application/vnd.ms-excel");
			String agent = request.getHeader("User-Agent");
			boolean isMSIE = (agent != null && agent.indexOf("MSIE") != -1);
			if (!StringUtil.isEmpty(excelName)) {
				if (isMSIE) {
					excelName = java.net.URLEncoder.encode(excelName, "UTF8");
				} else {
					excelName = new String(excelName.getBytes("UTF-8"),
							"ISO-8859-1");
				}
			}
			response.setHeader("content-disposition", "attachment;filename="
					+ excelName + ".xls");
			fOut = response.getOutputStream();
			wb.write(fOut);
			fOut.flush();
			fOut.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


}

最后生成的表格如下:

导出复合表头excel

 

相关文章:

  • 2021-12-28
  • 2022-12-23
  • 2021-12-28
  • 2021-11-17
  • 2022-12-23
  • 2021-12-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-28
  • 2022-01-05
  • 2021-12-24
  • 2022-12-23
相关资源
相似解决方案