导出到excel - ASP问题

时间:2014-10-14 08:41:07

标签: sql excel asp-classic

我试图将HTML表格导出为Excel,但遗憾的是,我无法继续使用。

我有一个基于前一页过滤器表单结果从数据库表中填充的表。该工作正常并过滤精细,在表格中显示输出。

现在,当我尝试通过ASP下载表时,它会下载整个SQL表。我已经尝试以隐藏的形式再次存储结果,并通过它下载;不起作用。当它移动到下一页时,它会丢失每个字段的数据,而是占用整个SQL表。

我一直在使用Response.ContentType和Response.AddHeader,据我所知这是你导出到excel / csv的方式。

如果有人可以帮助我,以便我可以在同一页面中使用超链接/按钮点击开始下载,那就太棒了。

修改

    <tr>
        <td name="StationReference"><a href="Inventory_details.asp?Name=<%=statRS("StationReference")%>&InventoryID=<%=statRS("InventoryID")%>"><%=statRS("StationReference")%></a></td>
        <td name="RepairStatus"><%=statRS("RepairStatus")%></td>
        <td name="SSD"><%=statRS("SSD")%></td>
        <td name="Motherboard"><%=statRS("Motherboard")%></td>
        <td name="PSU"><%=statRS("PSU")%></td>
        <td name="NetworkLogin"><%=rsGlobalUsers("NetworkLogin")%></td>
        <td name="RepairDate"><%=statRS("RepairDate")%></td>
        <td name="Location"><%=statRS("LocationName")%></td>
        <td align="center"><a href="repairsEdit.asp?InventoryID=<%=statRS("InventoryID")%>"><img src="../Images/Icon_edit.gif" align="absmiddle" alt="Edit" /></a></td>
    </tr>

以上代码显示过滤/搜索后的表格

以下代码是隐藏的表单

    <form id="hiddenDownload" name="hiddenDownload" action="downloadTable.asp" method="post">
        <input type="hidden" name="TheSearch" value="<%=statRS("InventoryID")%>">
        <input type="hidden" name="StationReference" value="<%=statRS("StationReference")%>">
        <input type="hidden" name="RepairStatus" value="<%=statRS("RepairStatus")%>">
        <input type="hidden" name="SSD"value="<%=statRS("SSD")%>">
        <input type="hidden" name="Motherboard" value="<%=statRS("Motherboard")%>">
        <input type="hidden" name="PSU" value="<%=statRS("PSU")%>">
        <input type="hidden" name="rtRepairedBy" value="<%=rsGlobalUsers("NetworkLogin")%>">
        <input type="hidden" name="rtRepairDate"value="<%=statRS("RepairDate")%>">
        <input type="hidden" value="<%=statRS("LocationName")%>">
        <input type="submit" value="Download">
    </form>

1 个答案:

答案 0 :(得分:0)

您需要精确删除Response.ContentType,以便显示表格格式。实际的html表看起来更重要,因为只有IE才能以最佳方式运行此命令。正如评论7中所述:

https://bugzilla.mozilla.org/show_bug.cgi?id=319428#c7

如果您刚刚将列设置为隐藏,则仍会显示它们。 Response.ContentType最适用于Internet Explorer。对于多个浏览器,您应该查看其他方法来生成Excel报告。如果您需要支持其他浏览器,则需要确保页面上唯一的内容是表格。什么都不应该被隐藏或以其他方式改变而不被显示。

修改 根据评论更新

第2页和第3页应该彼此相同而不仅仅是相似的。如果您无法按原样复制页面而没有任何更改,那么就会出现问题。以下示例应说明这一点:

第1页:

<Form id="form1" action="page2.asp" method="post">
    Sell Location: <input type="text" name="sellLocation"><br />
    <input type="submit">
</form>

第2页:

<%
    sLoc = Request("sellLocation")

    Set objCmd = CreateObject("ADODB.Command")
    Set objCmd.ActiveConnection = oConn
    objCmd.CommandType = 4 'Stored Proc
    objCmd.CommandText = "YourStoredProcedure"
    objCmd.Parameters.Refresh
    objCmd.Parameters("sellLocation") = sLoc 
    Set obj_rst = objCmd.Execute
%>

<Form id="form1" action="page3.asp" method="post">
    <input type="hidden" name="sellLocation"><br />
    <input type="submit" value="download">
</form>

<tr>
    <td name="StationReference"><a href="Inventory_details.asp?Name=<%=statRS("StationReference")%>&InventoryID=<%=statRS("InventoryID")%>"><%=statRS("StationReference")%></a></td>
    <td name="RepairStatus"><%=statRS("RepairStatus")%></td>
    <td name="SSD"><%=statRS("SSD")%></td>
    <td name="Motherboard"><%=statRS("Motherboard")%></td>
    <td name="PSU"><%=statRS("PSU")%></td>
    <td name="NetworkLogin"><%=rsGlobalUsers("NetworkLogin")%></td>
    <td name="RepairDate"><%=statRS("RepairDate")%></td>
    <td name="Location"><%=statRS("LocationName")%></td>
    <td align="center"><a href="repairsEdit.asp?InventoryID=<%=statRS("InventoryID")%>"><img src="../Images/Icon_edit.gif" align="absmiddle" alt="Edit" /></a></td>
</tr>

第3页:

<%
    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader "content-disposition", " filename=yourspreadsheetname.xls"

    sLoc = Request("sellLocation")

    Set objCmd = CreateObject("ADODB.Command")
    Set objCmd.ActiveConnection = oConn
    objCmd.CommandType = 4 'Stored Proc
    objCmd.CommandText = "YourStoredProcedure"
    objCmd.Parameters.Refresh
    objCmd.Parameters("sellLocation") = sLoc 
    Set obj_rst = objCmd.Execute
%>


<tr>
    <td name="StationReference"><a href="Inventory_details.asp?Name=<%=statRS("StationReference")%>&InventoryID=<%=statRS("InventoryID")%>"><%=statRS("StationReference")%></a></td>
    <td name="RepairStatus"><%=statRS("RepairStatus")%></td>
    <td name="SSD"><%=statRS("SSD")%></td>
    <td name="Motherboard"><%=statRS("Motherboard")%></td>
    <td name="PSU"><%=statRS("PSU")%></td>
    <td name="NetworkLogin"><%=rsGlobalUsers("NetworkLogin")%></td>
    <td name="RepairDate"><%=statRS("RepairDate")%></td>
    <td name="Location"><%=statRS("LocationName")%></td>
    <td align="center"><a href="repairsEdit.asp?InventoryID=<%=statRS("InventoryID")%>"><img src="../Images/Icon_edit.gif" align="absmiddle" alt="Edit" /></a></td>
</tr>

请注意第2页和第3页之间我要做的就是删除表单并添加response.contenttype指令。您似乎将值传递到页面的方式我想象这种格式是不可能的。