注意:本分非转载文章,只是为了不让在首页推荐,特地进行此设置。
通常需要让用户导出Excel的模板,一般可以先把模板保存到服务器,让用用户下载,对于不常变化的模板,还可以直接使用POI进行生成,下面就是如何使用POI生成。
1、对于表头,首先可以编写一个List,保存Excel模板的表头信息,如下:
/**
* @说明 返回费用明细的表头字段
* @return
*/
public static List getCostDetailList(){
List list = new ArrayList();
list.add("CO对象名称");
list.add("订单号");
list.add("确定名称");
list.add("大区");
list.add("分公司");
list.add("成本要素名称");
list.add("确定成本要素");
list.add("费用类型");
list.add("CO范围货币值");
list.add("名称");
list.add("月份");
list.add("过帐日期");
list.add("参考凭证编号");
list.add("物料描述");
list.add("成本要素");
return list;
}
2、然后使用POI生成Excel文件对象:
/**
* 返回导入模板 费用报表
* @return
*/
@SuppressWarnings("unchecked")
public HSSFWorkbook excelModelFybb(String type){
// 建立新HSSFWorkbook对象.
HSSFWorkbook wb = new HSSFWorkbook();
// 建立新的sheet对象.
HSSFSheet sheet = wb.createSheet("ExcelModel");
// 标头.
HSSFRow row0 = sheet.createRow((short) 0);
List list =new ArrayList();
//不同的type对应不同的报表模板
if(type.equals("1"))
list = ExcelListUtil.getCostReportList();
else if(type.equals("2"))
list = ExcelListUtil.getCostDetailList();
else if(type.equals("3"))
list = ExcelListUtil.getInnerDinningList();
else if(type.equals("4"))
list = ExcelListUtil.getInnerLodgingList();
else if(type.equals("5"))
list = ExcelListUtil.getInnerSupperMarketList();
else if(type.equals("6"))
list = ExcelListUtil.getInnerTravelList();
for(int i=0;i<list.size();i++){
String title = list.get(i).toString();
HSSFCell csCell00 = row0.createCell((short) i);
// 设置cell编码解决中文高位字节截断.
csCell00.setEncoding(HSSFCell.ENCODING_UTF_16);
// 设置中西文结合字符串.
csCell00.setCellValue(title);
}
return wb;
}
3、然后在Action或Servlet中输出这个Excel文件就可以了:
public ActionForward modelDownload(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
salesReportImportManager = getSalesReportImportManager();
String type = request.getParameter("type");
// 得到HSSFWorkbook对象
HSSFWorkbook fileName = null;
try {
fileName = salesReportImportManager.excelModelFybb(type);//这是上面代码中的那个生成Excel的方法
response.setHeader("Pragma", "");
response.setHeader("Expires", "");
response.setHeader("Cache-Control", "Private");
// 开始EXCEL操作
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\"ModelDownLoad.xls\"");
// 初始化输出流
OutputStream os = response.getOutputStream();
// 生成Excel文件
fileName.write(os);
// 立即输出
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}