【问题标题】:How to output an Excel *.xls file from classic ASP如何从经典 ASP 输出 Excel *.xls 文件
【发布时间】:2010-10-01 06:02:37
【问题描述】:

我有许多生成的 html 表,我需要将它们输出为 Excel 文件。该网站是用经典的 ASP 编码的。这可能吗?可以通过某种方式使用 Open Office 库来完成吗?


编辑:到目前为止,我已经尝试了一些建议,但似乎失败了。理想情况下,我希望用户能够单击将开始下载 .xls 文件的链接。这段代码:

<%@ Language=VBScript %>
<%  option explicit

Response.ContentType = "application/vnd.ms-excel"
Response.AppendHeader "content-disposition", " filename=excelTest.xls"
%>
<table>
    <tr>
        <th>Test Col 1</th>
        <th>Test Col 2</th>
        <th>Test Col 3</th>
        <th colspan="2">Test Col 4</th>
        <th>Test Col 6</th>
        <th>Test Col 7</th>
    </tr>
    <tr>
        <td>Data</td>
        <td>Data</td>
        <td>Data</td>
        <td>Data</td>
        <td>Data</td>
        <td>Data</td>
        <td>Data</td>
    </tr>
</table>

使用IE7获取页面时似乎失败。 IE 说它“无法下载 excelTest.asp”并且“请求的站点不可用或找不到。”

【问题讨论】:

标签: excel web-applications asp-classic


【解决方案1】:

XLS 文件不是真正的 Excel 文件。该代码创建一个扩展名为 .an xls 的 HTML 文件。当您尝试使用记事本打开 XLS 文件时,您可以看到 HTML 代码。

【讨论】:

    【解决方案2】:

    在添加 Response.Buffer = False 之前,我遇到了同样的问题。尝试将代码更改为以下内容。

    Response.Buffer = False Response.ContentType = "应用程序/vnd.ms-excel" Response.AddHeader "Content-Disposition", "attachment; filename=excelTest.xls"

    我现在唯一的问题是,当 Excel 打开文件时,我收到以下消息。

    您尝试打开的文件“FileName[1].xls”与文件扩展名指定的格式不同。在打开文件之前验证文件没有损坏并且来自受信任的来源。您现在要打开文件吗?

    当您打开文件时,数据全部显示在单独的列中,但电子表格全为白色,单元格之间没有边框。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      它是 AddHeader,而不是 AppendHeader。

      <%@ Language=VBScript %>
      <%  Option Explicit
      
      Response.ContentType = "application/vnd.ms-excel"
      Response.AddHeader "Content-Disposition", "attachment; filename=excelTest.xls"
      %>
      <table>
          <tr>
              <td>Test</td>
          </tr>
      </table>
      

      更新: 我写了一篇关于如何generate Excel files in ASP Classic 的博客文章。它包含一段相当有用的代码来生成 xls 和 csv 文件。

      【讨论】:

      【解决方案4】:

      MS 制作了一个名为 Office Web Components 的 COM 库来执行此操作。 MSOWC.dll 需要在服务器上注册。它可以创建和操作办公文档文件。

      How To Use the Spreadsheet Web Component with Visual Basic

      Working with the Office Web Components

      【讨论】:

        【解决方案5】:

        您始终可以将 HTML 表格导出为 XLS 文档。 Excel 在理解 HTML 表格方面做得很好。

        另一种可能是将 HTML 表格导出为 CSV 或 TSV 文件,但您需要在代码中设置格式。这并不难实现。

        Microsoft.Office.Interop 中有一些类允许您以编程方式创建 Excel 文件,但我一直发现它们有点笨拙。您可以找到creating a spreadsheet here 的 .NET 版本,对于经典 ASP,它应该很容易修改。

        至于 .NET,我一直很喜欢 CarlosAG's Excel XML Writer Library。它有一个很好的生成器,因此您可以设置 Excel 文件,将其保存为 XML 电子表格,它会生成代码来执行所有格式设置和所有操作。我知道这不是经典的 ASP,但我想我会把它扔掉。


        根据您上面的尝试,尝试添加标题:

        "Content-Disposition", "attachment; filename=excelTest.xls"
        

        看看这是否有效。另外,我总是将它用于内容类型:

          Response.ContentType = "application/octet-stream"
            Response.ContentType = "application/vnd.ms-excel"
        

        【讨论】:

        • VBScript 抛出错误:对象不支持此属性或方法:'Response.AppendHeader'
        【解决方案6】:

        必须在http头中指定客户端要下载的文件(附件):

        Response.ContentType = "application/vnd.ms-excel"
        Response.AppendHeader "content-disposition", "attachment: filename=excelTest.xls"
        

        http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html

        【讨论】:

          【解决方案7】:

          我曾经使用过一个“廉价而肮脏”的技巧……嘘,不要告诉任何人。如果您输出制表符分隔的文本并将文件名设为 *.xls,则 Excel 会在没有异议、问题或警告的情况下打开它。因此,只需将数据转换为带有制表符分隔的文本文件,您就可以使用 Excel 或 Open Office 打开它。

          【讨论】:

          • 实际上,如果文件是 TSV 格式,Excel 2007 会弹出一个警告对话框,但它的扩展名为 .xls,我也不知道有什么方法可以避免这种情况。
          • 将文本文件制作成 CSV,但给它一个 .csv 扩展名。 Excel 将打开它而不显示任何消息。
          • 两个潜在问题: (1) Microsoft Excel 将修剪前导空格和零; (2) Microsoft Excel 2010 在打开文件时会出现警告。 #1 可以通过用 ="{cell-data}" 包装文本来解决(通过:creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel
          • 当我想这样做时,我想我最终使用了 DIF 或 SYLK 格式来避免转换提示,但它的缺点是它希望文件使用 OEM 代码页。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-22
          相关资源
          最近更新 更多