第一步写action方法:
public String exportActiveExcel()
{
String name ="活跃度列表.xls";
try {
name = java.net.URLEncoder.encode(name, "UTF-8");
fileName = new String(name.getBytes(), "iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "success";
}
fileName 为类变量要生成get和set方法,作为文件的名称
第二步把数据写入到一个流里:
public InputStream getInputStream()
{
// 测试学生
ExportExcel ex = new ExportExcel();
String[] headers = {"学号", "姓名", "年龄", "性别", "出生日期"};
JSONArray array=new JSONArray();
JSONArray arr=new JSONArray();
arr.add(10000001);
arr.add("张三");
arr.add(20);
arr.add(true);
arr.add("2013-5-6");
JSONArray arr1=new JSONArray();
arr1.add(10000002);
arr1.add("李四");
arr1.add(24);
arr1.add(false);
arr1.add("2013-5-6");
array.add(arr);
array.add(arr1);
return ex.exportExcel("活跃度分析",headers, array);
}
用到的类:
public class ExportExcel
{
@SuppressWarnings("deprecation")
public InputStream exportExcel(String title, String[] headers, JSONArray array)
{
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 30);
// 生成一个标题样式
HSSFCellStyle titleStyle = workbook.createCellStyle();
// 设置这些样式
titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个标题字体
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
titleStyle.setFont(font);
// 生成内容样式
HSSFCellStyle contentStyle = workbook.createCellStyle();
contentStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
contentStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成内容字体
HSSFFont contentFont = workbook.createFont();
contentFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
// 把字体应用到当前的样式
contentStyle.setFont(contentFont);
// 产生表格标题行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++)
{
HSSFCell cell = row.createCell(i);
cell.setCellStyle(titleStyle);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//生成内容行
for (int i = 0; i < array.size(); i++)
{
row = sheet.createRow(i+1);
JSONArray arr=(JSONArray) array.get(i);
for (int j = 0; j < arr.size(); j++)
{
HSSFCell cell = row.createCell(j);
cell.setCellStyle(contentStyle);
HSSFRichTextString richString = new HSSFRichTextString(arr.get(j).toString());
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
}
}
//写入输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try
{
workbook.write(baos);// 写入
}
catch (IOException e)
{
e.printStackTrace();
}
byte[] ba = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(ba);
try
{
baos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return bais;
}
}
第三步配置struts.xml文件
<action name="exportActiveExcel" class="activeCountAction"
method="exportActiveExcel">
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
</result>
</action>
inputName的值要与流的方法一致,生成getXxxxx,不然找不到方法
在页面上直接调用action方法的路径
<input type="button" value="数据导出" onclick="javascript:window.location.href=‘exportActiveExcel‘;"/>