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