如題,實現這個功能(excel2003和2007均適用),使用的第三方jar包是 poi ,主要是記錄一下做過的東西,以便日後用。
一。jsp頁面 :
<form id ="exportExcel" name="exportExcel" action="exportExcel.do" method="post">
<input type="hidden" id ="A" name="param1" >
<input type="hidden" id ="B" name="param2" >
<input type="hidden" id ="C" name="param3" >
</form>
param1,2,3是參數,傳到action。
二。struts2的xml配置 :
<!-- 導出Excel -->
<action name="exportExcel" method="exportExcel" class="testAction">
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">excelFile</param>
</result>
</action>
三。 action端,需要兩個方法,一個是exportExcel()和struts配置文件指明的stream流方法excelFile().
exportExcel()
public String exportWaitOrderExcel(){
String name ="產品列表.xls";
try {
name = java.net.URLEncoder.encode(name, "UTF-8");
fileName = new String(name.getBytes(), "iso-8859-1");
} catch (UnsupportedEncodingException e) {
log4j.error("字符轉碼失敗");
}
return SUCCESS;
}
excelFile()
public InputStream getExcelFile() //getExcelFile()一定要與excelFile對應,否則會出現異常
{
//第一步:接收參數,查詢產品列表信息
String param1= getRequest().getParameter("param1");
String param2= getRequest().getParameter("param2");
String param3= getRequest().getParameter("param3");
List<ProductBean> productList = new ArrayList<ProductBean>();
Map<Object, Object> map = new HashMap<Object, Object>();
if (param1!= null && !param1.equals("")) {
map.put("param1", param1);
}
if (param2!= null && !param2.equals("")) {
map.put("param2", param2);
}
if (param3!= null && !param3.equals("")) {
map.put("param3", param3);
}
productList = productServicr.searchProductList(map);
//第二步:構建excel表格,封裝數據到excel
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("sheet1");
HSSFRow row = sheet.createRow(0);//創建第一行
HSSFCell cell = row.createCell(0);//第一列
cell.setCellValue("產品列表"); //行內容
HSSFCellStyle style = workbook.createCellStyle(); //創建樣式
HSSFFont font = workbook.createFont(); //創建字體樣式
font.setFontHeight((short)(20*20)); //字體
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //加粗
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //居中
style.setFont(font); //設置字體樣式
cell.setCellStyle(style); //設置樣式
sheet.addMergedRegion(new org.apache.poi.ss.util.Region(0,(short)0,0,(short)4)); //合併列
//String menus = "產品名稱,產品類型,產品描述";
row = sheet.createRow(1);//創建第一行
cell = row.createCell(0); //創建第一列
cell.setCellValue(new HSSFRichTextString("產品名稱"));
cell = row.createCell(1);//創建第二列
cell.setCellValue(new HSSFRichTextString("產品類型"));
cell = row.createCell(2);//
cell.setCellValue(new HSSFRichTextString("產品描述"));
for (int i = 0; i < productList.size(); i++) {
ProductBean product= list.get(i);
row=sheet.createRow(i+2);//創建第i+1行
cell=row.createCell(0);//創建第一列
cell.setCellValue(product.getName());
cell=row.createCell(1);//創建第二列
cell.setCellValue(product.getCategory()
cell=row.createCell(2);
cell.setCellValue(product.getDescription());
}
//第三步:寫入輸出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
workbook.write(baos);//寫入
} catch (IOException e) {
e.printStackTrace();
}
byte[] ba = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(ba);
return bais;
}