C# 使用xlsx版本的Microsoft Interop Excel SaveCopyAs

C# 使用xlsx版本的Microsoft Interop Excel SaveCopyAs,c#,excel,office-interop,C#,Excel,Office Interop,我们正在尝试在Windows Server上使用MS Interop Excel,并通过WCF使用它(对不起,我无法更详细地解释,因为我不完全理解它) 我们使用方法SaveCopyAs将生成的excel文件保存在temp目录中,然后将其读取到字节数组并作为回复发送 然而,在客户端应用程序中,当我们将其保存到扩展名为xlsx的文件中并尝试打开它后,Excel会向我们发出一个警告,表明文件已损坏,但在我们手动将文件名更改为xls后,它会正常工作 经过简短的研究,似乎office只是将其保存为某种较旧

我们正在尝试在Windows Server上使用MS Interop Excel,并通过WCF使用它(对不起,我无法更详细地解释,因为我不完全理解它)

我们使用方法
SaveCopyAs
将生成的excel文件保存在temp目录中,然后将其读取到字节数组并作为回复发送

然而,在客户端应用程序中,当我们将其保存到扩展名为
xlsx
的文件中并尝试打开它后,Excel会向我们发出一个警告,表明文件已损坏,但在我们手动将文件名更改为
xls
后,它会正常工作

经过简短的研究,似乎office只是将其保存为某种较旧的文件版本(?)。因此,一种解决方案是使用带有有效参数的
SaveAs
方法,但它会给我们带来很多麻烦,因此我们宁愿坚持使用
SaveCopyAs

是否有任何其他解决方案可以在不使用
SaveAs
方法的情况下以较新的文件格式保存此类文件


(到现在为止,您可能已经弄明白了,这是
System.Runtime.InteropServices.comeException(0x800A03EC):来自HRESULT的异常:0x800A03EC
Exception。)

我们所有问题的根源是负责服务器维护的员工,他们未经检查就说安装了office 2013,但实际上是2003年。

我认为有三种可能性:1。已以新格式创建原始Excel文件。2.让客户端使用xls扩展名保存文件。3.使用SaveAs()并解决您使用它时遇到的问题。运行时错误1004有多种原因,最接近的原因是较新版本的Office/Excel要求文件格式与文件扩展名匹配。这是一项安全措施。因此,如果您将xlsx扩展名添加到旧文件格式(xls)的文件中,您会收到一条警告-这是出于设计。您的另一个选择是不在服务器环境(无论如何都不支持)中自动运行Excel应用程序,而是直接使用Office Open XML文件格式。
SaveCopyAs
保留原始文件格式。根据错误判断,原始格式为
xls
。此时,您最好的选择是执行
SaveAs
,并将
FileFormat
指定给xlsx,IMHO。感谢您的评论,问题已经解决,但这是我们的错误。负责服务器维护的人员没有检查服务器上安装了什么office版本(2003…),这是导致我们出现此类问题的原因。