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

struts2利用poi导出excel文件

2014-01-26 10:13 453 查看
首先,利用poi生成excel

代码如下:

package com.hwhzsoft.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Map;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
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;

/**
* Excel文件导出工具类
* 该类是对导出excel文件功能的封装,这里提供了一个静态方法,getWorkbook();其有3个参数,第一个String数组
* 用来接收标题信息,第二个String数组中存放的内容是Map中存放的值的key,第三个list中已map的形式存放需要导出
* 到excel的结果。
* 同时该方法返回的是一个HSSFWorkbook对象,方便后续进行任何处理
*
* @author songjianchang
* @time 2013年11月29日10:16:05
*/
public class ExcelExportUtil {

/**
* 将数据写入Workbook(是否考虑数据量太大问题)
*
* @param titles 标题栏
* @param valueNames 查询结果对应的key
* @param result 查询结果
* @return
*/
public static InputStream getExcelInputStream(String[] titles, String[] valueNames ,List<Map<String, Object>> result){

//创建workbook对象
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个sheet页面
HSSFSheet sheet = workbook.createSheet("sheet1");
//创建第1行,表头信息
HSSFRow row = sheet.createRow(0);
//声明一个cell
HSSFCell cell;
//填充表头数据
for (int i = 0; i < titles.length; i++) {
//创建第i列
cell = row.createCell(i);
//填充第i列的值
cell.setCellValue(new HSSFRichTextString(titles[i]));
}
/**
* 将结果插入到sheet表中
*/
for (int i = 0; i < result.size(); i++) {
//创建第i+1列(除去表头)
row = sheet.createRow(i +1);
//获取第i个map的对象
Map<String, Object> map = result.get(i);
/**
* 遍历Map的值,并填充到cell中
*/
for (int j = 0; j < titles.length; j++) {
//创建单元格
cell = row.createCell(j);
//获取map中的值
String temp = map.get(valueNames[j]).toString();
cell.setCellValue(temp);
}
}

try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
baos.flush();
byte[] temps = baos.toByteArray();
InputStream input = new ByteArrayInputStream(temps, 0, temps.length);
baos.close();
return input;
} catch (Exception e) {
System.out.println("生成excel文件失败!");
}
return null;
}
}
在Action中对该方法进行调用,该部分的核心代码如下
try {

String[] titles = {"户号","仪表号","厂商","时间","进口温度","出口温度","温差","累计热量","累计流量","功率","流速","状态"};
String[] valueNames = {"resident_name","meter_number","meter_type_name","date","in_temperature","out_temperature","difference","total_heat","total_flow","instant_heat","instant_flow","read_status"};
List<Map<String, Object>> results = meterNewService.getAllMeterNew();
input = ExcelExportUtil.getExcelInputStream(titles, valueNames, results);
return SUCCESS;
} catch (Exception e) {
System.out.println("Excel导出错误");
}在struts2中对该Action的配置
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">input</param>
<param name="contentDisposition">filename="report.xls"</param>
<param name="bufferSize">1024</param>
</result>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2 excel poi