jxl生成excel 并下载

这是个工具类,这次使用的jxl的包,下面就是生成的过程

import java.io.File;

import java.io.UnsupportedEncodingException;

import java.util.List;

import java.util.Map;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import jxl.CellView;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.Border;

import jxl.format.BorderLineStyle;

import jxl.format.VerticalAlignment;

import jxl.write.Label;

import jxl.write.WritableCellFormat;

import jxl.write.WritableFont;

import jxl.write.WritableImage;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;


public class ExportExcel {


// @Autowired

// SysUsersMapper usersMapper;

/*

* @param  contenttitle EXCEL文件名称

* @param  listTitle EXCEL文件第一行列标题集合

* @param  datalist 数据list

* @param  cols 字段列表

* @param path 生成的文件路径

* @return

*/

@SuppressWarnings("rawtypes")

public static boolean exportExcel(String path, String contenttitle,String[] listTitle, List<Map> datalist, String[] cols) {

try {

//File logo = new File("./src/main/webapp/assets/biz-logic/images/logo.png"); //读入logo图片

File Folder = new File(path);

//找到文件夹

if(!Folder.exists()){

Folder.mkdirs();

}

//文件

File file = new File(path+contenttitle+".xls");

// WritableWorkbook wb = Workbook.createWorkbook(file);

/** **********创建工作簿************ */

WritableWorkbook workbook = Workbook.createWorkbook(file);

/** **********创建工作表************ */

WritableSheet sheet = workbook.createSheet("Sheet1", 0);

/** **********设置纵横打印(默认为纵打)、打印纸***************** */

jxl.SheetSettings sheetset = sheet.getSettings();

sheetset.setProtected(false);

/** ************设置单元格字体************** */

WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);

WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);

/** ************以下设置三种单元格样式,灵活备用************ */

// 用于标题居中

WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);

//wcf_center.setIndentation(33);//Border 边框  Indentation  缩格

wcf_center.setLocked(true);

wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条

wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐

wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐

wcf_center.setWrap(false); // 文字是否换行

// 用于正文居左

WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);

wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条

wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐

wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐左

wcf_left.setWrap(false); // 文字是否换行

wcf_left.setIndentation(0);

// 用于正文列名

WritableCellFormat wcf_head= new WritableCellFormat(NormalFont);

wcf_head.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条

wcf_head.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐

wcf_head.setAlignment(Alignment.CENTRE); // 文字水平对齐 居中

wcf_head.setWrap(false); // 文字是否换行

wcf_head.setIndentation(0);

//excel页面标题 根据列名长度合并单元格

sheet.mergeCells(0, 0, listTitle.length-1 ,4);//合并单元格起始列、行,到末列行

//WritableImage image = new WritableImage(0, 0, 1.5, 5, logo);//设置logo图片

// sheet.addImage(image); // 加载图片

sheet.addCell(new Label(0, 0, contenttitle, wcf_center));//表格标题名

/** ***************以下是EXCEL列标题********************* */

CellView cellView = new CellView();  

cellView.setAutosize(true); //设置自动大小

for (int i = 0; i < listTitle.length; i++) {

sheet.addCell(new Label(i, 5, listTitle[i], wcf_head));

}

/** ***************以下是EXCEL正文数据********************* */

for (int i = 0; i < datalist.size(); i++) {

Map dataMap = datalist.get(i);

for (int j = 0; j < cols.length; j++) {

if(j==0){

//序号  为了生成序号

sheet.addCell(new Label(j, i + 6, i+1+"", wcf_left));

}else{

if(dataMap.get(cols[j])==null){

//防止有空项导出是报空指针异常

sheet.addCell(new Label(j, i + 6, "~", wcf_left));

}else{

sheet.addCell(new Label(j, i + 6, dataMap.get(cols[j]).toString(), wcf_left));

sheet.setColumnView(j, dataMap.get(cols[j]).toString().length()+10);

}

}

}

}

/** **********将以上缓存中的内容写到EXCEL文件中******** */

workbook.write();

/** *********关闭文件************* */

workbook.close();

} catch (Exception e) {

e.printStackTrace();

return false;

}

return true;

}

}

中间有插入图片,后来取消了;

下面是下载前必须要做的,防止乱码

public static void setFileDownloadHeader(HttpServletRequest request,HttpServletResponse response, String fileName) {

   try {

       //中文文件名支持

       String encodedfileName = null;

       String agent = request.getHeader("USER-AGENT");

       if(null != agent && -1 != agent.indexOf("MSIE")){//IE

           encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");

       }else if(null != agent && -1 != agent.indexOf("Mozilla")){

           encodedfileName = new String (fileName.getBytes("UTF-8"),"iso-8859-1");

       }else{

           encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");

       }

       response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\"");

       

   } catch (UnsupportedEncodingException e) {

       e.printStackTrace();

   }

}

以上只需要在controler中调用就行;

最后需要注意的是请求应该是url,不能通过ajax去请求,虽然都用了get请求,但ajax会报错,而url却不会,这一点需要在注意,这也和很多网上的下载链接需要跳转页的原因是相同的;也许ajax需要其他的写法才能完成,以后用的时候回来补充的。链接:http://www.oschina.net/code/snippet_1444646_47221#67538

你可能感兴趣的:(java,Excel,下载,JXL)