GZMachinesWeb/.svn/pristine/76/76855bb2a410a207ddc223aa368...

221 lines
8.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.bonus.index.controller;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
/**
* 导出表格工具类
*
* @author lvjilong
*/
public class ExcelUtils {
//excel默认宽度
private static int width = 256 * 14;
//默认字体
private static String excelfont = "微软雅黑";
/**
* @param excelName 导出的EXCEL名字
* @param sheetName 导出的SHEET名字 当前sheet数目只为1
* @param headers 导出的表格的表头
* @param ds_titles 导出的数据 map.get(key) 对应的 key
* @param ds_format 导出数据的样式
* 1:String left;
* 2:String center
* 3:String right
* 4 int right
* 5:float ###,###.## right
* 6:number: #.00% 百分比 right
* @param widths 表格的列宽度 默认为 256*14
* @param data 数据集 List<Map>
* @param response
* @throws IOException
*/
public static void export(String excelName, String sheetName, String[] headers, String[] ds_titles, int[] ds_format, int[] widths, List<Map<String, Object>> data, HttpServletRequest request, HttpServletResponse response) throws IOException {
HttpSession session = request.getSession();
session.setAttribute("state", null);
if (widths == null) {
widths = new int[ds_titles.length];
for (int i = 0; i < ds_titles.length; i++) {
widths[i] = width;
}
}
if (ds_format == null) {
ds_format = new int[ds_titles.length];
for (int i = 0; i < ds_titles.length; i++) {
ds_format[i] = 1;
}
}
//设置文件名
String fileName = "";
if (isNotEmpty(excelName)) {
fileName = excelName;
}
//创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
//创建一个sheet
HSSFSheet sheet = wb.createSheet(isNotEmpty(sheetName) ? sheetName : "excel");
//创建表头,如果没有跳过
int headerrow = 0;
if (headers != null) {
HSSFRow row = sheet.createRow(headerrow);
//表头样式
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBold(true);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
// style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setWrapText(true);
// style.setAlignment(HorizontalAlignment.CENTER);
// style.setBorderBottom(BorderStyle.THIN);
// style.setBorderLeft(BorderStyle.THIN);
// style.setBorderRight(BorderStyle.THIN);
// style.setBorderTop(BorderStyle.THIN);
for (int i = 0; i < headers.length; i++) {
sheet.setColumnWidth((short) i, (short) widths[i]);
HSSFCell cell = row.createCell(i);
cell.setCellValue(headers[i]);
cell.setCellStyle(style);
}
headerrow++;
}
//表格主体 解析list
if (data != null) {
List styleList = new ArrayList();
for (int i = 0; i < ds_titles.length; i++) { //列数
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 10);
style.setFont(font);
// style.setBorderBottom(BorderStyle.THIN);
// style.setBorderLeft(BorderStyle.THIN);
// style.setBorderRight(BorderStyle.THIN);
// style.setBorderTop(BorderStyle.THIN);
// if (ds_format[i] == 1) {
// style.setAlignment(HorizontalAlignment.LEFT);
// } else if (ds_format[i] == 2) {
// style.setAlignment(HorizontalAlignment.CENTER);
// } else if (ds_format[i] == 3) {
// style.setAlignment(HorizontalAlignment.RIGHT);
// //int类型
// } else if (ds_format[i] == 4) {
// style.setAlignment(HorizontalAlignment.RIGHT);
// //int类型
// style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0"));
// } else if (ds_format[i] == 5) {
// //float类型
// style.setAlignment(HorizontalAlignment.RIGHT);
// style.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
// } else if (ds_format[i] == 6) {
// //百分比类型
// style.setAlignment(HorizontalAlignment.RIGHT);
// style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00%"));
// }
styleList.add(style);
}
for (int i = 0; i < data.size(); i++) { //行数
HSSFRow row = sheet.createRow(headerrow);
Map map = data.get(i);
for (int j = 0; j < ds_titles.length; j++) { //列数
HSSFCell cell = row.createCell(j);
Object o = map.get(ds_titles[j]);
if (o == null || "".equals(o)) {
cell.setCellValue("");
} else if (ds_format[j] == 4) {
//int
cell.setCellValue((Long.valueOf((map.get(ds_titles[j])) + "")).longValue());
} else if (ds_format[j] == 5 || ds_format[j] == 6) {
//float
cell.setCellValue((Double.valueOf((map.get(ds_titles[j])) + "")).doubleValue());
} else {
cell.setCellValue(map.get(ds_titles[j]) + "");
}
cell.setCellStyle((HSSFCellStyle) styleList.get(j));
}
headerrow++;
}
}
fileName = fileName + ".xls";
String filename = "";
try {
filename = encodeChineseDownloadFileName(request, fileName);
} catch (Exception e) {
e.printStackTrace();
}
response.setHeader("Content-disposition", filename);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + filename);
response.setHeader("Pragma", "No-cache");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
wb.close();
}
/**
* 对文件流输出下载的中文文件名进行编码 屏蔽各种浏览器版本的差异性
*
* @throws UnsupportedEncodingException
*/
public static String encodeChineseDownloadFileName(
HttpServletRequest request, String pFileName) throws Exception {
String filename = null;
String agent = request.getHeader("USER-AGENT");
if (null != agent) {
if (contains(agent, "MSIE") || contains(agent, "like Gecko")) {//IE浏览器
filename = URLEncoder.encode(pFileName, "UTF-8");
} else if (contains(agent, "Mozilla")) {//google,火狐浏览器
filename = new String(pFileName.getBytes(), "ISO8859-1");
} else {//其他
filename = URLEncoder.encode(pFileName, "UTF-8");
}
} else {
filename = pFileName;
}
return filename;
}
/**
* 判断字符串 不为空
*/
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
public static boolean isEmpty(String str) {
if (str == null || "" .equals(str.trim())) {
return true;
}
return false;
}
public static boolean contains(String s1, String s2) {
if (isEmpty(s1)) {
return false;
}
return s1.contains(s2);
}
}