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低版本)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。