您的位置:首页 > 编程语言 > Java开发

Struts2导出Excel

2013-12-06 10:40 246 查看
//这Action里的java代码

@SuppressWarnings("unchecked")

public String createExcelLength() throws IOException,

InvocationTargetException {

System.out.println(inputStream);

List<Map> list = null;

Map map = new HashMap();// 装载分页函数需要的参数,里边包含每页多少条,第几页,查询条件

map.put("rows", (rows)); // 放入每页条数

map.put("page", (this.page)); // 放入当前页码

map.put("begdate", this.begdate); // 放入开始时间

map.put("enddate", this.enddate); // 放入结束时间

map.put("chanelId", this.chanelId); // 放入频道id

map.put("saleId", this.saleId); // 放入sale_id

list = amsRemainLengthService.selectAmsMeuInfo(map);

String columnNameArray = "salename,mon,ty,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31";

String showNameAry = "销售品名称,月份,类型,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31";

HSSFWorkbook workbook = new HSSFWorkbook(); // 产生工作簿对象

HSSFSheet sheet = workbook.createSheet(); // 产生工作表对象

HSSFFont columnHeadFont = workbook.createFont();

columnHeadFont.setFontName("宋体");

columnHeadFont.setFontHeightInPoints((short) 12);

columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

// 列头的样式

HSSFCellStyle columnHeadStyle = workbook.createCellStyle();

columnHeadStyle.setFont(columnHeadFont);

columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中

columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

// 设置第一个工作表的名称为firstSheet

// 为了工作表能支持中文,设置字符编码为UTF_16

workbook.setSheetName(0, "firstSheet");

// 产生一行

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

String[] showNameArray = showNameAry.split(",");

// 产生第一个单元格

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

HSSFCell cell = row.createCell(i);

// 设置单元格内容为字符串型

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

cell.setCellValue(showNameArray[i]);

}

// 为了能在单元格中写入中文,设置字符编码为UTF_16。

// cell.setEncoding(HSSFCell.ENCODING_UTF_16);

int rowNum = 1;

// 循环往单元格中写入信息

// 根据数据库里面返回的list的size循环创建行

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

Map mapData = list.get(i);

HSSFRow row1 = sheet.createRow((short) rowNum);

String[] aaaa = columnNameArray.split(",");

for (int j = 0; j < 34; j++) {

HSSFCell cell1 = row1.createCell(j);

if (mapData.get("fl").equals("0")) {

// 设置单元格内容为字符串型

cell1.setCellType(HSSFCell.CELL_TYPE_STRING);

if (mapData.containsKey(aaaa[j])) {

cell1.setCellValue(mapData.get(aaaa[j]).toString());

} else {

cell1.setCellValue("");

}

} else {

if (mapData.containsKey(aaaa[j])) {

Font font = workbook.createFont();

font.setColor(HSSFColor.RED.index);

columnHeadStyle.setFont(font);

cell1.setCellStyle(columnHeadStyle);

// 设置单元格内容为字符串型

cell1.setCellType(HSSFCell.CELL_TYPE_STRING);

cell1.setCellValue(mapData.get(aaaa[j]).toString());

} else {

cell1.setCellValue("");

}

}

在struts2.

}

rowNum += 1;

}

this.filename = "AmsRemainLength.xls";

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

System.out.println("aa");

try {

workbook.write(outputStream);

inputStream = new ByteArrayInputStream(outputStream.toByteArray());

outputStream.flush();

outputStream.close();

return "excel";

} catch (Exception e) {

e.printStackTrace();

return "excel";

}

}

在struts2.xml里面的配置

<result name="excel" type="stream">

<!-- 指定下载文件的内容类型,text/plain是默认类型 -->

<param name="contentType">text/plain</param>

<!--

inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数

-->

<param name="inputName">inputStream</param>

<!--动态获取文件名,从Action中的取得filename-->

<param name="contentDisposition">

attachment;filename="${filename}"

</param>

<param name="bufferSize">2048</param>

</result>

备注:导入的excel文件必须是microsoft 的office。不能用WPS的(WPS的excel不能读取)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: