来博客园两年多了,最近才开通了微博,因为懒所以也一直没有写东西,今天想整理一下自己前段时间遇到的一个导出的问题。

  因为项目的需求,要做一部分导出功能。开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报500错误,发现在删减一些字段后就恢复了正常,当时因为项目紧张,也就临时删减了一些,但也不是长久之计,之后自己在原本的基础上重新修改整理了一下,目前运行还算稳定,就此和大家分享一下。

  导出需要三个部分,js,公共方法,后台方法。

  js代码

 function exportData()
{
//前台接收的参数
rwmc = $("#txt_rwmc").val();
rwlb = $("#com_rwlb").combobox("getValues").join(","); //调用后台导出功能
var service = new Service("cx.RybjcxBndService.exprotExcel");
var str="<RWMC>" + rwmc + "</RWMC><RWLB>" + rwlb + "</RWLB>";
var res = service.doService(str);
var oDoc = loadXml(res);
if (service.getCode() != "2000") {
showMessage("查询失败:"+service.getMessage());
return;
}
var nodata = oDoc.selectSingleNode("ROOT/NODATA").text;
if (nodata == "nodata") {
showMessage("无数据!");
return;
}
// 获取导出信息
var titleName = oDoc.selectSingleNode("ROOT/TITLE_NAME").text;
var fileName = oDoc.selectSingleNode("ROOT/FILE_NAME").text;
var outPutInfo = oDoc.selectSingleNode("ROOT/OUTPUTINFO").text;
var download_path = oDoc.selectSingleNode("ROOT/DOWNLOAD_PATH").text;
if (outPutInfo != "") {
showMessage(outPutInfo);
return;
}
if (confirm("导出成功!确认下载文件吗?\n文件名称为:"+fileName)) {
var file = fileName;
var showfile = titleName + ".xls";
showfile = decodeURIComponent(showfile);
var idx = document.URL.indexOf("/adp");
if (idx == -1) {
alert("无法识别主机地址:" + document.URL);
return;
}
var host = document.URL.substring(0, idx);
var width = screen.width;
var height = screen.height;
debugger;
// 打开下载页面
var param = "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
var isIE=!!window.ActiveXObject;
var isIE6=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);
}
}
}

公共类

 package ctais.business.gzkp.common;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.poi2.hssf.usermodel.HSSFCell;
import org.apache.poi2.hssf.usermodel.HSSFCellStyle;
import org.apache.poi2.hssf.usermodel.HSSFFont;
import org.apache.poi2.hssf.usermodel.HSSFRow;
import org.apache.poi2.hssf.usermodel.HSSFSheet;
import org.apache.poi2.hssf.usermodel.HSSFWorkbook; import ctais.business.dashboard.service.ExportExcel; import ctais.config.Config;
import ctais.services.data.DataWindow;
import ctais.services.xml.XMLDataObject;
import ctais.services.xml.XMLParser;
import ctais.util.StringEx;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook; /**
* <p>Title: 生成EXCEL文件</p>
* <p>Description: 转换String字符串为EXCEL文档</p> */ public class CreateExcel {
private final static String CONFIG_FILE_PATH = Config.CTAIS_HOME;
WritableWorkbook wwb = null;
XMLDataObject xdo = null; public CreateExcel(){ } /**
* 生成EXCEL
* @param sql 查询SQL
* @param czryDm 操作人员代码
* @param titles 导出列标题
* @param exlTitle excel表头
* @return
* @throws Exception
*/
public String newToExcel(String sql,String czryDm,String[] titles,String exlTitle) throws Exception
{
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
ExportExcel exportExcel = new ExportExcel(wb, sheet);
StringBuffer sffer = new StringBuffer();
//int colNum = 30; DataWindow dw = DataWindow.dynamicCreate(sql.toString());
dw.setConnectionName(Icomm.GZKPJNDI);
long dwRet = dw.retrieve();
if (dwRet <= 0) {
sffer.append("<NODATA>nodata</NODATA>");
return sffer.toString();
} else {
sffer.append("<NODATA></NODATA>");
} int colNum = dw.getColumnCount(); // 给工作表列定义列宽(实际应用自己更改列数)
for (short i = 0; i <= colNum; i++) {
sheet.setColumnWidth(i, (short) 4000);
}
// 创建单元格样式
HSSFCellStyle cellHeadStyle = wb.createCellStyle();
// 指定单元格居中对齐
cellHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 指定单元格垂直居中对齐
cellHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 指定当单元格内容显示不下时自动换行
cellHeadStyle.setWrapText(true);
// 设置单元格字体
HSSFFont headFont = wb.createFont();
headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
headFont.setFontName("宋体");
headFont.setFontHeight((short) 200);
cellHeadStyle.setFont(headFont); // 创建报表头部
Date dt=new Date();
SimpleDateFormat sdt=new SimpleDateFormat("yyyyMMddhhmmssS");
String sfm = czryDm + "_" + sdt.format(dt); // 设置列头
exportExcel.createNormalHead(exlTitle, colNum-1);
HSSFRow row1 = sheet.createRow(1); for(int i = 0; i < titles.length; i ++) {
HSSFCell cell = row1.createCell((short)i);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellHeadStyle);
cell.setCellValue(titles[i]);
}
Object value = ""; //设置表格样式
HSSFCellStyle cellStyle = wb.createCellStyle();
// 指定单元格居中对齐
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 指定单元格垂直居中对齐
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 指定当单元格内容显示不下时自动换行
cellStyle.setWrapText(true);
// 设置单元格字体
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.SS_NONE);
font.setFontName("宋体");
font.setFontHeight((short) 200);
cellStyle.setFont(font);
for(int i = 0 ; i < dw.getRowCount(); i++) {
HSSFRow row = sheet.createRow(i + 2);
for(int j = 1; j <= dw.getColumnCount(); j++) {
HSSFCell cell = 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系统需要手动建路径,(此处的原因有人比较清楚的话还请指教)引用新建的文件路径
String path = "/export/";
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
} String fileName = sfm+".xls"; //String pth = path.trim() + File.separator + fileName;
String pth = path.trim() + fileName;
pth = pth.trim(); String outPutInfo = 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>"); return sffer.toString();
}
catch (Exception e) {
e.printStackTrace();
throw new Exception(e.getMessage());
}
} }

后台代码

 /**
* 导出功能
* @param xdo 前台传参
* @param czryDm 操作人员代码
* @return 生成的XLS信息
* @throws Exception 异常说明
*/
public String exportExcel(XMLDataObject args,String czryDm) throws Exception
{
//接收前台传递的查询参数
String rwmc = StringEx.sNull(args.getItemValue("RWMC"));
String rwlb = StringEx.sNull(args.getItemValue("RWLB")); if(null != rwmc && !"".equals(rwmc))
{
sqlWhere.append(" AND A.RWMC LIKE '%"+rwmc+"%' ");
}
if(null != rwlb && !"".equals(rwlb))
{
sqlWhere.append(" AND A.RWLB_DM = '"+rwlb+"' ");
} StringBuilder sql = new StringBuilder();
//拼接查询SQL
sql.append("SELECT RWXH,RWMC FROM RWXX")
.append(sqlWhere).append(" ORDER BY RWXH ) ").append(sqlisWhere);
//导出的列标题
String[] titles = {"任务序号","任务名称"}; //实例化公共类
CreateExcel excel = new CreateExcel();
return excel.newToExcel(sql.toString(), czryDm,titles,"Exlcel表头");
}

Java程序实现导出Excel,支持IE低版本的更多相关文章

  1. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  2. Java中导入导出Excel -- POI技术

    一.介绍: 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实 ...

  3. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  4. 润乾报表新功能–导出excel支持锁定表头

     在以往的报表设计中,锁定表头是会经常被用到的一个功能,这个功能不仅能使浏览的页面更加直观,信息对应的更加准确,而且也提高了报表的美观程度.但是,很多客户在将这样的报表导出excel时发现exce ...

  5. java五行代码导出Excel

    目录 先看代码 再看效果 EasyExcel 附: Java按模板导出Excel---基于Aspose实现 Java无模板导出Excel,Apache-POI插件实现 已经写过两种Excel导出插件了 ...

  6. java使用jxls导出Excel

    jxls是基于POI的Excel模板导出导入框架.通过使用类似于jstl的标签,有效较少导出Excel的代码量. 1.pom <!-- https://mvnrepository.com/art ...

  7. 解决selenium不支持firefox低版本的问题

    解决selenium不支持firefox低版本的问题 在火狐浏览器升级后,突然发现webdriver运行脚本的时候不能调出火狐浏览器了,并报错WebDriverException:Message:'C ...

  8. 支持IE低版本的上传 大文件切割上传 断点续传 秒传

    1. http://files.cnblogs.com/files/blackice/UploadDemo.rar 此demo是使用的 swfupload 2.http://download.csdn ...

  9. Java无模板导出Excel,Apache-POI插件实现

    开发环境 jdk 1.8 Maven 3.6 Tomcat 8.5 SpringBoot 2.1.4.RELEASE Apache-POI 3.6 Idea 注意: 我是在现有的基于SpringBoo ...

随机推荐

  1. HDOJ/HDU 1015 Safecracker(深搜)

    Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kle ...

  2. 操作12864(ST7920控制器)

    引脚部分查看中文的12864介绍,下面这些可以在ST7920的英文数据手册里查到. Function Description 部分介绍工作方式.存储器.操作方法.Instructions 部分介绍指令 ...

  3. Java Networking: InetAddress

    The InetAddress is Java's representation of an IP address. Instances of this class are used together ...

  4. 使用Java程序发送Email

        目前很多大型的网站忘记登录密码常见的一种形式是使用邮箱找回密码  最近做项目也有这个需求  现在总结一下  以便以后查看 使用到的包有 mailapi.jar smtp.jar   封装发送邮 ...

  5. 使用json-lib进行Java和JSON之间的转换【转载】

    1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能. 2. ...

  6. 关于Parse库的配置问题

    在使用Parse的一些相关服务时候,需要下载Parse的SDK,除了需要添加相应的系统框架和库的支持 AudioToolbox.framework CFNetwork.framework CoreGr ...

  7. [D3] 2. Basics of SVG

    1. svg should use 'fill' prop instead 'background-color'2. svg width & height no need 'px'3. att ...

  8. [D3] 7. Quantitative Scales

    # Quantitative Scales var colorScale = d3.scale.quantile() .domain([d3.max(dataset) / 4, d3.max(data ...

  9. (转载)关于ArrayList的5道面试题

    我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...

  10. VC++文件相关操作的函数封装实现

    在开发编译工具中,需要用到文件的相关操作,于是就封装了相关的函数实现: //判断文件是否存在 BOOL FileIsExist(CString strFileName) { CFileFind fin ...