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

  因为项目的需求,要做一部分导出功能。开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报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. 如何避免jQuery库和其他库的冲突

    默认情形:jQuery用$作为自身的快捷方式 1. jQuery库在其他库之后导入 (1)方法:使用jQuery.noConflict()函数将变量$的控制权转移给其他库 (2)操作: (a)在js代 ...

  2. UVA 10256 The Great Divide (凸包,多边形的位置关系)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34148 [思路] 凸包 求出红蓝点的凸包,剩下的问题就是判断两个凸 ...

  3. 《锋利的Jquery第二版》读书笔记 第三章

    DOM操作的分类 1.DOM Core不专属JavaScript,任何一种支持DOM的程序设计语言都可以使用它,也可以处理XML等标记语言编写出来的文档,getElementById().setAtt ...

  4. UVA 11802 All Your Bases Belong to Us

    题意:这个题题意个人觉得蛮难懂的....意思就是求,把十进制下的n!转化成m进制,末位有且仅有k个连续的0.告诉n和k,求满足题意的m有多少个. 1<= k <= 10^15,n < ...

  5. 【LeetCode】Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  6. FLASH轮播广告 在谷歌浏览器中不显示的解决办法(FLash轮播放广告在谷歌浏览器中无法显示处理方法)

    在用PHPWEB模板的时候,碰到首页有一个FLASH轮播广告,在IE浏览器下可以正常显示播放,在谷歌浏览器中却显示不了,解决办法如下: 欢迎转载:http://blog.csdn.net/aminfo ...

  7. iOS9上的Universal Link实现(教程)

    1.Universal Link 理解为苹果官方支持deeplink就行了 2.通过点击HTTP链接启动APP Web・iOS应用在支持Universal Link的前提下,当用户点击特点的链接时会自 ...

  8. Java中的三目运算符 详解

    对于有些选择分支结构,可以使用简单的条件运算符来代替. 如: if(a<b)    min=a;else    min=b; 可以用下面的条件运算符来处理 min=(a<b)?a:b; 其 ...

  9. UVA 11551 - Experienced Endeavour(矩阵高速幂)

    UVA 11551 - Experienced Endeavour 题目链接 题意:给定一列数,每一个数相应一个变换.变换为原先数列一些位置相加起来的和,问r次变换后的序列是多少 思路:矩阵高速幂,要 ...

  10. UML要点总结(一)

    UML中的事物 UML事物包含结构事物.行为事物.组织事物和辅助事物. 结构事物: 类.接口.用例.协作.活动类.组件和节点. 行为事物: 也称动作事物,交互和状态机. 组织事物: 也称分组事物,仅仅 ...