Java程序实现导出Excel的方法(支持IE低版本)
今天想整理一下自己前段时间遇到的一个导出的问题。
因为项目的需求,要做一部分导出功能。开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报500错误,发现在删减一些字段后就恢复了正常,当时因为项目紧张,也就临时删减了一些,但也不是长久之计,之后自己在原本的基础上重新修改整理了一下,目前运行还算稳定,就此和大家分享一下。
导出需要三个部分,js,公共方法,后台方法。
js代码
functionexportData() { //前台接收的参数 rwmc=$("#txt_rwmc").val(); rwlb=$("#com_rwlb").combobox("getValues").join(","); //调用后台导出功能 varservice=newService("cx.RybjcxBndService.exprotExcel"); varstr="<RWMC>"+rwmc+"</RWMC><RWLB>"+rwlb+"</RWLB>"; varres=service.doService(str); varoDoc=loadXml(res); if(service.getCode()!="2000"){ showMessage("查询失败:"+service.getMessage()); return; } varnodata=oDoc.selectSingleNode("ROOT/NODATA").text; if(nodata=="nodata"){ showMessage("无数据!"); return; } //获取导出信息 vartitleName=oDoc.selectSingleNode("ROOT/TITLE_NAME").text; varfileName=oDoc.selectSingleNode("ROOT/FILE_NAME").text; varoutPutInfo=oDoc.selectSingleNode("ROOT/OUTPUTINFO").text; vardownload_path=oDoc.selectSingleNode("ROOT/DOWNLOAD_PATH").text; if(outPutInfo!=""){ showMessage(outPutInfo); return; } if(confirm("导出成功!确认下载文件吗?\n文件名称为:"+fileName)){ varfile=fileName; varshowfile=titleName+".xls"; showfile=decodeURIComponent(showfile); varidx=document.URL.indexOf("/adp"); if(idx==-1){ alert("无法识别主机地址:"+document.URL); return; } varhost=document.URL.substring(0,idx); varwidth=screen.width; varheight=screen.height; debugger; //打开下载页面 varparam="toolbar=no,location=no,status=yes,resizable=no,scrollbars=yes,top="+height+",left="+width+",width=100,height=100"; //---------------------------------------------------------- //此代码块为解决ie6下导出excel失败问题,原因是ie6对window.open(url)支持度不好, //当浏览器为ie6时改用window.location.href varisIE=!!window.ActiveXObject; varisIE6=isIE&&!window.XMLHttpRequest; if(isIE6){ window.location.href=host+"/adp/work/gzkp/common/js/download_new.jsp?file="+file+"&showfile="+showfile+"&download_path="+download_path; }else{ window.open(host+"/adp/work/gzkp/common/js/download_new.jsp?file="+file+"&showfile="+showfile+"&download_path="+download_path,"_blank",param); } } }
公共类
packagectais.business.gzkp.common; importjava.io.File; importjava.io.FileInputStream; importjava.text.SimpleDateFormat; importjava.util.Date; importorg.apache.poi2.hssf.usermodel.HSSFCell; importorg.apache.poi2.hssf.usermodel.HSSFCellStyle; importorg.apache.poi2.hssf.usermodel.HSSFFont; importorg.apache.poi2.hssf.usermodel.HSSFRow; importorg.apache.poi2.hssf.usermodel.HSSFSheet; importorg.apache.poi2.hssf.usermodel.HSSFWorkbook; importctais.business.dashboard.service.ExportExcel; importctais.config.Config; importctais.services.data.DataWindow; importctais.services.xml.XMLDataObject; importctais.services.xml.XMLParser; importctais.util.StringEx; importjxl.Workbook; importjxl.format.Alignment; importjxl.write.Label; importjxl.write.WritableCellFormat; importjxl.write.WritableFont; importjxl.write.WritableSheet; importjxl.write.WritableWorkbook; /** *<p>Title:生成EXCEL文件</p> *<p>Description:转换String字符串为EXCEL文档</p> *<p>Copyright:Copyright(c)2004</p> *<p>Company:DC</p> *@authorFENGZG *@version1.0 *时间:2015-12-28 */ publicclassCreateExcel{ privatefinalstaticStringCONFIG_FILE_PATH=Config.CTAIS_HOME; WritableWorkbookwwb=null; XMLDataObjectxdo=null; publicCreateExcel(){ } /** *生成EXCEL *@paramsql查询SQL *@paramczryDm操作人员代码 *@paramtitles导出列标题 *@paramexlTitleexcel表头 *@return *@throwsException */ publicStringnewToExcel(Stringsql,StringczryDm,String[]titles,StringexlTitle)throwsException { try{ HSSFWorkbookwb=newHSSFWorkbook(); HSSFSheetsheet=wb.createSheet(); ExportExcelexportExcel=newExportExcel(wb,sheet); StringBuffersffer=newStringBuffer(); //intcolNum=30; DataWindowdw=DataWindow.dynamicCreate(sql.toString()); dw.setConnectionName(Icomm.GZKPJNDI); longdwRet=dw.retrieve(); if(dwRet<=0){ sffer.append("<NODATA>nodata</NODATA>"); returnsffer.toString(); }else{ sffer.append("<NODATA></NODATA>"); } intcolNum=dw.getColumnCount(); //给工作表列定义列宽(实际应用自己更改列数) for(shorti=0;i<=colNum;i++){ sheet.setColumnWidth(i,(short)4000); } //创建单元格样式 HSSFCellStylecellHeadStyle=wb.createCellStyle(); //指定单元格居中对齐 cellHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //指定单元格垂直居中对齐 cellHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //指定当单元格内容显示不下时自动换行 cellHeadStyle.setWrapText(true); //设置单元格字体 HSSFFontheadFont=wb.createFont(); headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headFont.setFontName("宋体"); headFont.setFontHeight((short)200); cellHeadStyle.setFont(headFont); //创建报表头部 Datedt=newDate(); SimpleDateFormatsdt=newSimpleDateFormat("yyyyMMddhhmmssS"); Stringsfm=czryDm+"_"+sdt.format(dt); //设置列头 exportExcel.createNormalHead(exlTitle,colNum-1); HSSFRowrow1=sheet.createRow(1); for(inti=0;i<titles.length;i++){ HSSFCellcell=row1.createCell((short)i); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellStyle(cellHeadStyle); cell.setCellValue(titles[i]); } Objectvalue=""; //设置表格样式 HSSFCellStylecellStyle=wb.createCellStyle(); //指定单元格居中对齐 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //指定单元格垂直居中对齐 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //指定当单元格内容显示不下时自动换行 cellStyle.setWrapText(true); //设置单元格字体 HSSFFontfont=wb.createFont(); font.setBoldweight(HSSFFont.SS_NONE); font.setFontName("宋体"); font.setFontHeight((short)200); cellStyle.setFont(font); for(inti=0;i<dw.getRowCount();i++){ HSSFRowrow=sheet.createRow(i+2); for(intj=1;j<=dw.getColumnCount();j++){ HSSFCellcell=row.createCell((short)(j-1)); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellStyle(cellStyle); value=dw.getItemAny(i,j-1); if(value==null){ cell.setCellValue(""); }else{ cell.setCellValue(value.toString()); } } } //设置导出路径,此处需要注意如果是Linux系统需要手动建路径,(此处的原因有人比较清楚的话还请指教)引用新建的文件路径 Stringpath="/export/"; Filefile=newFile(path); if(!file.exists()){ file.mkdirs(); } StringfileName=sfm+".xls"; //Stringpth=path.trim()+File.separator+fileName; Stringpth=path.trim()+fileName; pth=pth.trim(); StringoutPutInfo=exportExcel.outputExcel(pth); sffer.append("<TITLE_NAME>"+sfm+"</TITLE_NAME>"); sffer.append("<DOWNLOAD_PATH>"+path+"</DOWNLOAD_PATH>"); sffer.append("<FILE_NAME>"+fileName+"</FILE_NAME>"); sffer.append("<OUTPUTINFO>"+outPutInfo+"</OUTPUTINFO>"); returnsffer.toString(); } catch(Exceptione){ e.printStackTrace(); thrownewException(e.getMessage()); } } }
后台代码
/** *导出功能 *@paramxdo前台传参 *@paramczryDm操作人员代码 *@return生成的XLS信息 *@throwsException异常说明 */ publicStringexportExcel(XMLDataObjectargs,StringczryDm)throwsException { //接收前台传递的查询参数 Stringrwmc=StringEx.sNull(args.getItemValue("RWMC")); Stringrwlb=StringEx.sNull(args.getItemValue("RWLB")); if(null!=rwmc&&!"".equals(rwmc)) { sqlWhere.append("ANDA.RWMCLIKE'%"+rwmc+"%'"); } if(null!=rwlb&&!"".equals(rwlb)) { sqlWhere.append("ANDA.RWLB_DM='"+rwlb+"'"); } StringBuildersql=newStringBuilder(); //拼接查询SQL sql.append("SELECTRWXH,RWMCFROMRWXX") .append(sqlWhere).append("ORDERBYRWXH)").append(sqlisWhere); //导出的列标题 String[]titles={"任务序号","任务名称"}; //实例化公共类 CreateExcelexcel=newCreateExcel(); returnexcel.newToExcel(sql.toString(),czryDm,titles,"Exlcel表头"); }
以上这篇Java程序实现导出Excel的方法(支持IE低版本)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。