第一步寫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';" />