您的位置:首页 > 其它

excell导出到本地

2015-11-04 11:11 363 查看
1.excell工具类

package com.kortide.fulllife.op.web.utils;

import java.io.BufferedInputStream;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Font;

import org.apache.poi.ss.usermodel.IndexedColors;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

/**

* 导出Excel文档工具类

* */

public class ExcelUtil {

/**

* 创建excel文档,

* @param list 数据

* @param keys list中map的key数组集合

* @param columnNames excel的列名

* */

public static HSSFWorkbook createWorkBook(List<Map<String, Object>> list,String []keys,String columnNames[]) {

// 创建excel工作簿

HSSFWorkbook wb = new HSSFWorkbook();

// 创建第一个sheet(页),并命名

Sheet sheet = wb.createSheet("sheet1");

// 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。

for(int i=0;i<keys.length;i++){

sheet.setColumnWidth((short) i, (short) (35.7 * 150));

}

// 创建第一行

Row row = sheet.createRow((short) 0);

// 创建两种单元格格式

CellStyle cs = wb.createCellStyle();

CellStyle cs2 = wb.createCellStyle();

// 创建两种字体

Font f = wb.createFont();

Font f2 = wb.createFont();

// 创建第一种字体样式(用于列名)

f.setFontHeightInPoints((short) 10);

f.setColor(IndexedColors.BLACK.getIndex());

f.setBoldweight(Font.BOLDWEIGHT_BOLD);

// 创建第二种字体样式(用于值)

f2.setFontHeightInPoints((short) 10);

f2.setColor(IndexedColors.BLACK.getIndex());

// Font f3=wb.createFont();

// f3.setFontHeightInPoints((short) 10);

// f3.setColor(IndexedColors.RED.getIndex());

// 设置第一种单元格的样式(用于列名)

cs.setFont(f);

cs.setBorderLeft(CellStyle.BORDER_THIN);

cs.setBorderRight(CellStyle.BORDER_THIN);

cs.setBorderTop(CellStyle.BORDER_THIN);

cs.setBorderBottom(CellStyle.BORDER_THIN);

cs.setAlignment(CellStyle.ALIGN_CENTER);

// 设置第二种单元格的样式(用于值)

cs2.setFont(f2);

cs2.setBorderLeft(CellStyle.BORDER_THIN);

cs2.setBorderRight(CellStyle.BORDER_THIN);

cs2.setBorderTop(CellStyle.BORDER_THIN);

cs2.setBorderBottom(CellStyle.BORDER_THIN);

cs2.setAlignment(CellStyle.ALIGN_CENTER);

//设置列名

for(int i=0;i<columnNames.length;i++){

Cell cell = row.createCell(i);

cell.setCellValue(columnNames[i]);

cell.setCellStyle(cs);

}

//设置每行每列的值

for (short i = 0; i < list.size(); i++) {

// Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的

// 创建一行,在页sheet上

Row row1 = sheet.createRow((short) i+1);

// 在row行上创建一个方格

for(short j=0;j<keys.length;j++){

Cell cell = row1.createCell(j);

cell.setCellValue(list.get(i).get(keys[j]) == null?" ": list.get(i).get(keys[j]).toString());

cell.setCellStyle(cs2);

}

}

return wb;

}

}

2.生成cell并下载本地

/导出至excell

@RequestMapping(value="/exportFoxconn.do",method=RequestMethod.GET)

@ResponseBody

public String exportFoxconn(FoxConnDto foxConnDto,HttpServletResponse response){

logger.debug("Foxconn( FoxConnDto foxConnDto={}) - start", foxConnDto);

try {

foxConnDto.setTypeId(-1);

foxConnDto.setStart(0);

foxConnDto.setLimit(1000000);

String fileName="excel文件";

IPage<FoxConnReturn> page = foxconnService.searchFoxconnList(foxConnDto);

List<FoxConnReturn> list = (List)page.getRows();

String columnNames[]={"ID","标题","图片路径","文章类型","文章链接","概要","点击量","创建时间"};//列名

String keys[] = {"id","title","iconUrl","typeId","newsUrl","remark","clickCount","createTime"};//map中的key

// FileOutputStream os = new FileOutputStream("e:\\foxconnExport.xls");

List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>();

for (FoxConnReturn foxConnReturn:list) {

Map<String,Object> map = new HashMap<String,Object>();

map.put("id", foxConnReturn.getId());

map.put("title", foxConnReturn.getTitle());

map.put("iconUrl", foxConnReturn.getIconUrl());

if ("1".equals(foxConnReturn.getIconUrl())) {

map.put("typeId", "自编辑文章");

} else {

map.put("typeId", "第三方引入文章");

}

map.put("newsUrl", foxConnReturn.getNewsUrl());

map.put("remark", foxConnReturn.getRemark());

map.put("clickCount", foxConnReturn.getClickCount());

map.put("createTime", foxConnReturn.getCreateTime());

list2.add(map);

}

try {

response.reset();

response.setContentType("application/x-download");

response.addHeader("Content-Disposition", "attachment;filename="+ new String("foxconnExport.xls".getBytes(), "iso8859-1"));

ByteArrayOutputStream os = new ByteArrayOutputStream();

ExcelUtil.createWorkBook(list2,keys,columnNames).write(os);

byte[] content = os.toByteArray();

InputStream is = new ByteArrayInputStream(content);

// 设置response参数,可以打开下载页面

/* response.setContentType("application/vnd.ms-excel;charset=utf-8");

response.setHeader("Content-Disposition", "attachment;filename=" + new String(("foxconnExport" + ".xls").getBytes(), "iso-8859-1"));

*/

ServletOutputStream out = response.getOutputStream();

BufferedInputStream bis = null;

BufferedOutputStream bos = null;

try {

bis = new BufferedInputStream(is);

bos = new BufferedOutputStream(out);

byte[] buff = new byte[2048];

int bytesRead;

// Simple read/write loop.

while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {

bos.write(buff, 0, bytesRead);

}

} catch (final IOException e) {

throw e;

} finally {

if (bis != null)

bis.close();

if (bos != null)

bos.close();

}

// download("e:\\foxconnExport.xls", response);

} catch (IOException e) {

e.printStackTrace();

}finally {

}

return JsonUtils.jsonFromObject_AllToString(page);

} catch(TsfaServiceException e){

throw e;

}catch (Exception e) {

logger.error("FoxConnDto error", e);

throw new TsfaServiceException("","", e);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: