0

在 Web 应用程序中,我正在使用 XSL 模板生成电子表格 XML。我希望这个电子表格 XML 默认在 Excel 中打开。因此,我将以下属性添加到响应中:

Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "Attachment;Filename=export.xls");
Response.Charset = "";

但是,这有两个问题,首先我收到以下消息:

The file you are trying to open, 'Response.xls', is in a different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?

第二,当我尝试保存它时,默认情况下它会尝试另存为 .xml 文件。我希望它默认保存为 Excel 文件,有人知道这样做的方法吗?

4

2 回答 2

0

Excel XLS 文件与打开电子表格 XML 文件的格式不同,这就是为什么当 Excel 尝试打开 XLS 并发现它不是一个时,它会向您抱怨。Excel 当然可以打开 Open Spreadsheet XML 文件,这就是它仍然在 Excel 中打开它的原因。但它是一个 XML 文件,所以当你再次保存它时,它仍然是一个 XML 文件。我认为解决此问题的唯一方法是另存为,然后手动将格式更改为 .XLS。

不过,对于第一个问题,您可能可以做一些事情。将文件重命名为 Export.xml,但确保以下处理指令出现在 XML 文件的顶部

<?mso-application progid="Excel.Sheet"?>

这有望使 XML 文件在 Excel 中打开,而不是在 Internet Explorer 中打开。

但是,就 XSLT 而言,要输出这样的处理指令,您需要在输出任何元素之前将此代码添加到 XSLT 样式表中

<xsl:processing-instruction name="mso-application">
  <xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
于 2013-08-23T20:19:32.600 回答
-1

来晚了,但如果有人遇到这个问题,这就是我解决它的方法。

如果扩展不是那么重要并且您正在使用 XSLT,您可以执行 Tim C 为 XSLT 文件解释的操作并添加以下内容

<xsl:processing-instruction name="mso-application">
  <xsl:text>progid="Excel.Sheet"</xsl:text>
</xsk:processing-instruction>

然后在您的代码中,您将制作扩展名 .xml 而不是 .xls

Response.AddHeader("Content-Disposition", "Attachment;Filename=export.xml");

这将导出带有 .xml 扩展名的文件,但默认情况下,它将在 MS Excel 2007 中打开而不会出现任何错误,同时保留转换文件中存在的所有样式。

希望这可以帮助某人。

于 2015-04-06T13:56:51.460 回答