1 package demo; 2 3 import java.io.OutputStream; 4 import java.lang.reflect.Field; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.List; 8 9 import javax.servlet.http.HttpServletResponse; 10 11 import jxl.Workbook; 12 import jxl.format.Alignment; 13 import jxl.format.Border; 14 import jxl.format.BorderLineStyle; 15 import jxl.format.VerticalAlignment; 16 import jxl.write.Label; 17 import jxl.write.WritableCellFormat; 18 import jxl.write.WritableFont; 19 import jxl.write.WritableSheet; 20 import jxl.write.WritableWorkbook; 21 /*** 22 * @author lsf 23 */ 24 public class ExportExcel { 25 /** 26 * @param fileName EXCEL文件名称 27 * @param listTitle EXCEL文件第一行列标题集合 28 * @param listContent EXCEL文件正文数据集合 29 * @return 30 */ 31 public final static String exportExcel(HttpServletResponse response,String fileName,String[] Title, List<Object> listContent) { 32 String result="系统提示:Excel文件导出成功!"; 33 // 以下开始输出到EXCEL 34 try { 35 //定义输出流,以便打开保存对话框______________________begin 36 // HttpServletResponse response=ServletActionContext.getResponse(); 37 OutputStream os = response.getOutputStream();// 取得输出流 38 response.reset();// 清空输出流 39 response.setHeader("Content-disposition", "attachment; filename="+ new String(fileName.getBytes("GB2312"),"ISO8859-1")); 40 // 设定输出文件头 41 response.setContentType("application/msexcel");// 定义输出类型 42 //定义输出流,以便打开保存对话框_______________________end 43 44 /** **********创建工作簿************ */ 45 WritableWorkbook workbook = Workbook.createWorkbook(os); 46 47 /** **********创建工作表************ */ 48 WritableSheet sheet = workbook.createSheet("Sheet1", 0); 49 50 /** **********设置纵横打印(默认为纵打)、打印纸***************** */ 51 jxl.SheetSettings sheetset = sheet.getSettings(); 52 sheetset.setProtected(false); 53 54 /** ************设置单元格字体************** */ 55 WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10); 56 WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD); 57 58 /** ************以下设置三种单元格样式,灵活备用************ */ 59 // 用于标题居中 60 WritableCellFormat wcf_center = new WritableCellFormat(BoldFont); 61 wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条 62 wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐 63 wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐 64 wcf_center.setWrap(false); // 文字是否换行 65 66 // 用于正文居左 67 WritableCellFormat wcf_left = new WritableCellFormat(NormalFont); 68 wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条 69 wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐 70 wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐 71 wcf_left.setWrap(false); // 文字是否换行 72 73 74 /** ***************以下是EXCEL开头大标题,暂时省略********************* */ 75 //sheet.mergeCells(0, 0, colWidth, 0); 76 //sheet.addCell(new Label(0, 0, "XX报表", wcf_center)); 77 /** ***************以下是EXCEL第一行列标题********************* */ 78 for (int i = 0; i < Title.length; i++) { 79 sheet.addCell(new Label(i, 0,Title[i],wcf_center)); 80 } 81 /** ***************以下是EXCEL正文数据********************* */ 82 Field[] fields=null; 83 int i=1; 84 for(Object obj:listContent){ 85 fields=obj.getClass().getDeclaredFields(); 86 int j=0; 87 for(Field v:fields){ 88 v.setAccessible(true); 89 Object va=v.get(obj); 90 if(va==null){ 91 va=""; 92 } 93 if (va instanceof Date) 94 { 95 Date date = (Date) va; 96 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 97 va = sdf.format(date); 98 } 99 sheet.addCell(new Label(j, i,va.toString(),wcf_left)); 100 j++; 101 } 102 i++; 103 } 104 /** **********将以上缓存中的内容写到EXCEL文件中******** */ 105 workbook.write(); 106 /** *********关闭文件************* */ 107 workbook.close(); 108 109 } catch (Exception e) { 110 result="系统提示:Excel文件导出失败,原因:"+ e.toString(); 111 System.out.println(result); 112 e.printStackTrace(); 113 } 114 return result; 115 } 116 }
下面写一个简单的servlet类来测试导出的情况:
1 package demo; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.PrintWriter; 8 import java.net.MalformedURLException; 9 import java.net.URL; 10 import java.util.ArrayList; 11 import java.util.List; 12 13 import javax.servlet.http.HttpServlet; 14 import javax.servlet.http.HttpServletRequest; 15 import javax.servlet.http.HttpServletResponse; 16 17 18 /** 19 * 导出excel测试 20 * @author sy 21 * 22 */ 23 public class HelloServlet extends HttpServlet{ 24 25 public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{ 26 String result=excelPage(response); 27 System.out.println(result); 28 /*设置消息返回格式*/ 29 response.setCharacterEncoding("utf-8"); 30 response.setHeader("Pragma","No-cache"); 31 response.setHeader("Cache-Control","no-cache"); 32 response.setDateHeader("Expires",0); 33 PrintWriter out = response.getWriter(); 34 out.print(result); 35 out.flush(); 36 out.close(); 37 } 38 39 /** 40 * 导出excel 41 * @return 42 */ 43 public static String excelPage(HttpServletResponse response){ 44 ExportExcel excel=new ExportExcel(); 45 List<Object> li=new ArrayList<Object>(); 46 UserInfo user=new UserInfo(); 47 user.setId(0); 48 user.setName("张三"); 49 user.setPassword("123456"); 50 user.setBirthday(new Date()); 51 li.add(user); 52 String[] Title={"姓名","年龄","爱好","描述"}; 53 return excel.exportExcel(response,"自定义表单信息.xls",Title, li); 54 } 55 }
ps:因为我写的导出工具是用于web的,传递参数中含有response,向本地测试的朋友可以自行修改下。