C# 在c asp.net中编辑word文档

C# 在c asp.net中编辑word文档,c#,asp.net,ms-word,C#,Asp.net,Ms Word,我正在编辑word模板,然后将其保存在web服务器上。为此,我使用互操作。Word我知道这很糟糕,但仍然 我已经在服务器上安装了MS Word 这是我的密码: object fileName; object saveAs; fileName = Server.MapPath("~\\tempOutputs\\Template - Filled with Registration Data.docx"); try { object missing = System.Reflection.Miss

我正在编辑word模板,然后将其保存在web服务器上。为此,我使用互操作。Word我知道这很糟糕,但仍然

我已经在服务器上安装了MS Word

这是我的密码:

object fileName;
object saveAs;
fileName = Server.MapPath("~\\tempOutputs\\Template - Filled with Registration Data.docx");

try
{
object missing = System.Reflection.Missing.Value;
Word.Application wordApp =  new Word.Application();
Word.Document aDoc = null;
if (File.Exists((string)fileName))
{
    object readOnly = false;
    object isVisible = false;
    wordApp.Visible = false;

    aDoc = wordApp.Documents.Open(ref fileName, ref missing,
    ref readOnly, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing, ref missing,
    ref missing, ref isVisible, ref missing, ref missing,
    ref missing, ref missing);

    aDoc.Activate(); //Error Line
我在aDoc上出错。Activate语句作为对象引用未设置为实例,但它在我的系统上工作

有什么建议吗

编辑


我已经用上面的代码编写了一个控制台应用程序,并在服务器上运行它。它运行得很好,那么为什么不在IIS上作为web应用程序运行呢

整个方法都是错误的。。
在服务器端操作word文档只能使用开放式xml或类似的框架来完成,这些框架基本上是设计用于多线程场景的。

我很久以前使用过VSTO,可能是7年或8年前,但不是在服务器端。。。我在进程停滞、内存泄漏和奇怪的问题上遭受了很多痛苦,我的代码在某个地方工作,而其他地方与你的不同。 解决方案是操作系统语言和安装的Office语言不匹配。因此,您应该检查这一点,并检查您的代码区域性信息:

Thread.CurrentThread.CurrentUICulture;
Thread.CurrentThread.CurrentCulture;

如果你真的需要,我不明白为什么??检查语言,安装Office语言包,等等。。。但我也建议您使用其他方法。

虽然您不应该这样做的原因有很多,请参阅以获取信息,但您可能会遇到代码运行身份的问题


您的Web服务器运行的身份是什么?当您以交互方式运行(即使用visual studio等进行调试)时,您将以当前登录用户的身份运行,然而,在您的服务器上,您的Web服务器运行的应用程序池将作为任何人运行,例如ApplicationPoolIdentity,在服务器端运行Word Interop主要是正确设置应用程序池使用的用户帐户(例如webuser)的权限的问题

对相应文件夹的读/写访问权限 使用webuser帐户和start Word实际登录到服务器;后记断开;不要注销! 将webuser添加到分布式COM用户的用户组 打开组件服务管理并打开MyComputer上的属性;在COM安全中,为用户提供本地启动和本地激活权限应该是多余的,但是是的 如果是32位字,用“-32”打开mmc,然后选择文件->添加/删除管理单元;在左侧选择组件服务,点击〖增加〗按钮,确定;在“计算机/我的计算机”下搜索Microsoft Word 97-2003文档并打开属性;在identity下输入用户;在“安全性”下,添加用户(如果尚未添加),并授予他们相应的权限 这应该是明智的。话虽如此,服务器端的互操作仍然是一个后遗症。我们现在已经在生产服务器上运行了两年,但也不是没有问题。即使我在测试服务器上运行了所有的负载测试,我仍然不相信它真的没有内存泄漏。我们只使用它,因为我们需要docx到pdf的转换,而且我们测试的所有库要么工作不正常,要么性能很差,要么也使用wordinterop。它作为一个独立的windows服务运行,在崩溃恢复等方面花费了很多时间。我从来没有用它来编辑文档。这就是OpenXMLSDK的用途


顺便说一句:如果你的代码最后没有出现finally块,那么你肯定是在构建内存泄漏。此外,您还需要对正在使用的文档、应用程序的Documents属性和应用程序本身调用Marshal.finalEleaseComObject。

我感觉您需要有服务器许可证才能工作。。。但我可能错了。阅读OpenXML可能会很有用……但是,我可能又错了,你为什么不使用OOXML SDK呢?我们有微软Office的企业许可证,它涵盖了windows、电子邮件、Office的所有内容,所以我不记得在哪里,但是我很确定我已经看到,试图在服务器上实现任何办公自动化都被认为是一个非常糟糕的主意!文件存在,但是否已锁定?在共享方面,Office通常不是很友好,这就是为什么在服务器上自动化MS Office是个坏主意的原因之一。服务器本质上是多线程的,在某个时刻,两个线程将尝试打开同一个文件,整个过程将崩溃。