解决方案 »

  1.   

    如果事先下载功能的话,还不如使用servlet的response.setContentType(CONTENT_TYPE);
    去实现下载呢
    如果非要用js实现可以在google浏览器上面debug 调试下
      

  2.   

     public class ExportExcel
        {
            public static void DataTable2Excel(System.Data.DataTable dtData)
            {
                System.Web.UI.WebControls.DataGrid dgExport = null;
                // 当前对话 
                System.Web.HttpContext curContext = System.Web.HttpContext.Current;
                // IO用于导出并返回excel文件 
                System.IO.StringWriter strWriter = null;
                System.Web.UI.HtmlTextWriter htmlWriter = null;            if (dtData != null)
                {
                    // 设置编码和附件格式 
                    curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
                    curContext.Response.ContentType = "application/vnd.ms-excel";
                    curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                    curContext.Response.Charset = "GB2312";
                    curContext.Response.Charset = "";                // 导出excel文件 
                    strWriter = new System.IO.StringWriter();
                    htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);                // 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid 
                    dgExport = new System.Web.UI.WebControls.DataGrid();
                    dgExport.DataSource = dtData.DefaultView;
                    dgExport.AllowPaging = false;
                    dgExport.DataBind();                // 返回客户端 
                    dgExport.RenderControl(htmlWriter);
                    curContext.Response.Write(strWriter.ToString());
                    curContext.Response.End();
                }
            }
      

  3.   

    导出的方法很多,我是就这个js导出在ie6上为什么不能实现就论。
      

  4.   


    说明:实现的功能是checkBox选择多个订单对象,然后由word或excel导出Jsp页面
    <a href="javascript:exportOrders('excel')">批量导出订单(excel)</a><a href="javascript:exportOrders('word')">批量导出订单(word)</a>--------------------------------------------------------------Js文件
    /*
     * 批量导出订单
     *将要导出数据id进行拼接
     */
    function exportOrders(model) {
    //messageId是checkbox的id 
    var messageIds = document.getElementsByName("messageId");
    var orderIds = "";
    var checkedCount = 0;
    for ( var i = 0; i < messageIds.length; i++) {
    if (messageIds[i].checked) {
    checkedCount++;
    }
    }
    if (checkedCount <= 0) {
    alert("请至少选择一条数据!");
    return;
    } else {
    for ( var i = 0; i < messageIds.length; i = i + 1) {
    if (messageIds[i].checked) {
    orderIds += ("'"+messageIds[i].value + "';");
    }
    }
    }
    document.getElementById("orderIds").value = orderIds;
    document.getElementById("model").value = model;
    var action = document.myForm.action;// 记录之前的Action,用完之后,恢复原状
    document.myForm.action = "order/exportOrders/";
    document.myForm.submit();
    document.myForm.action = action;
    }--------------------------------------------------------------Struts.xml文件
    <!-- 批量导出订单信息(excel/word)-->
    <actionname="exportOrders"method="exportOrders" class="com.cloudsoar3c.action.OrderAction">
    <result name="excel">/WEB-INF/order/exportOrdersExcel.jsp
    </result>
    <result name="word">/WEB-INF/order/exportOrdersWord.jsp
    </result>
    <interceptor-ref name="securityStack"></interceptor-ref>
    </action>--------------------------------------------------------------Action文件
    /**
     * 批量导出订单信息(excel/word)
     * 
     * @return
     */
    public String exportOrders(){
    String stringOrderIds = this.request.getParameter("orderIds");
    String model = this.request.getParameter("model");
    String orderIds = Util.charReplacement(stringOrderIds, ";", ",");
    Util.log(orderIds);
    List<TOrder> orderList = this.orderBiz.getOrderListByIds(orderIds);
    Util.log("导出的订单集合大小:"+orderList.size());
    super.request.setAttribute("orderList", orderList);
    return "excel".equals(model.trim()) ? "excel" : "word";
    }--------------------------------------------------------------/**
     * 拆分字符串(将"A#B#C#D#E#F#"格式的字符串转换为"A,B,C,D,E,F"),并输出  */
    public static String charReplacement(String sourceStr, String sourceChar,
    String targetChar) {
    String result = ""; // 将需要处理的字符串中含有的sourceChar,全部替换为targetChar
    String temp = sourceStr.replaceAll(sourceChar, targetChar); // 截取字符串中最后一个字符;
    int len = temp.length();
    result = temp.substring(0, len - 1); return result;
    }-------------------------------------------------------------------导出Excel的返回页面 exportOrdersExcel.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page contentType="text/html; charset=GBK" %>
    <%@taglib uri="/struts-tags" prefix="s"%>
    <%@page import="java.util.*"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <% response.setContentType("application/vnd.ms-excel;charset=GBK"); %>
    <HTML>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <head><title>Test</title></head>
    <body>
    <%
    request.setCharacterEncoding("GBK");
       SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
      response.setHeader("Content-Disposition", "attachment;filename=order_"+sf.format(new Date())+".xls");
    %>
    <center>订单列表</center>
    <table border="1" align="center" width="60%">
      <tr align="center">
        <td>序号</td>
    <td>订单号</td>
    <td>单价(元)</td>
    <td>数量</td>
                           <td>总金额(元)</td>
    <td>优惠价格(元)</td>
    <td>实际需付金额(元)</td>
    <td>下单时间</td>
    <td>订单完成时间</td>
    <td>客户账号</td>
    <td>主机名称</td>
    <td>订单状态</td>
      </tr>
      <s:iterator value="#request.orderList" var="order" status="st">
       <tr align="center">
        <td style="mso-number-format:'\@';">${st.count }</td>
        <td style="mso-number-format:'\@';">&nbsp;<s:property value="#order.orderId"/>&nbsp;
    </td>
        <td style="mso-number-format:'\@';">&nbsp;<s:property value="#order.price"/>&nbsp;</td>
        <td style="mso-number-format:'\@';">&nbsp;<s:property value="#order.buyCount"/>&nbsp;</td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property value="%{@com.cloudsoar3c.tools.Util@getTotalPriceByOrder(#order.totalPrice)}"/>&nbsp;</td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property value="#order.preferentialPrice"/></td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property value="%{@com.cloudsoar3c.tools.Util@getActualPayByOrder(#order.totalPrice,#order.preferentialPrice)}"/>&nbsp;</td>
    <td style="mso-number-format:'\@';">&nbsp;<s:date name="#order.orderTime" format="yyyy-MM-dd HH:mm:dd"/>&nbsp;</td>
        <td style="mso-number-format:'\@';">&nbsp;<s:date name="#order.completeTime" format="yyyy-MM-dd HH:mm:dd"/>&nbsp;</td>
        <td style="mso-number-format:'\@';">&nbsp;<s:property value="#order.TClient.email"/>&nbsp;</td>
        <td style="mso-number-format:'\@';">&nbsp;<s:property value="#order.TServerHostLicense.hostName"/>&nbsp;</td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property value="%{#order.TStatusTypeContent.statusTypeContent}"/>&nbsp;</td>
       </tr>
      </s:iterator>
    </table>
    </body>
    </HTML>
    -------------------------------------------------------------------
    导出word的返回页面 exportOrdersWord.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page contentType="text/html; charset=GBK"%>
    <%@taglib uri="/struts-tags" prefix="s"%>
    <%@page import="java.util.*"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%
    response.setContentType("application/vnd.ms-word;charset=GBK");
    %>
    <HTML>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <head>
    <title>Test</title>
    </head>
    <body>
    <%
    request.setCharacterEncoding("GBK");
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
    response.setHeader("Content-Disposition",
    "attachment;filename=order_" + sf.format(new Date())
    + ".doc");
    %>
    <center>订单列表</center>
    <table border="1" align="center" width="2000px">
    <tr align="center">
    <td>序号</td>
    <td>订单号</td>
    <td>单价(元)</td>
    <td>数量</td>
    <td>总金额(元)</td>
    <td>优惠价格(元)</td>
    <td>实际需付金额(元)</td>
    <td>下单时间</td>
    <td>订单完成时间</td>
    <td>客户账号</td>
    <td>主机名称</td>
    <td>订单状态</td>
    </tr>
    <s:iterator value="#request.orderList" var="order" status="st">
    <tr align="center">
    <td style="mso-number-format:'\@';">${st.count }</td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="#order.orderId" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="#order.price" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="#order.buyCount" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="%{@com.cloudsoar3c.tools.Util@getTotalPriceByOrder(#order.totalPrice)}" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="#order.preferentialPrice" /></td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="%{@com.cloudsoar3c.tools.Util@getActualPayByOrder(#order.totalPrice,#order.preferentialPrice)}" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:date
    name="#order.orderTime" format="yyyy-MM-dd HH:mm:dd" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:date
    name="#order.completeTime" format="yyyy-MM-dd HH:mm:dd" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;
                           <s:property value="#order.TClient.email" />&nbsp;
    </td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="#order.TServerHostLicense.hostName" />&nbsp;</td>
    <td style="mso-number-format:'\@';">&nbsp;<s:property
    value="%{#order.TStatusTypeContent.statusTypeContent}" />&nbsp;
    </td>
    </tr>
    </s:iterator>
    </table>
    </body>
    </HTML>
      

  5.   

    Internet选项—安全—受限制的站点—自定义级别中启用ActiveX空间和插件