我在外部Web服务器上运行c#.net中的这个Web应用程序。我试图在服务器上生成并保存单词doc(不打开它)。它在我的本地机器上运行罚款,因为我在我的机器上安装了单词但在服务器上它显示使用MyApplication Class时出错。我知道无法在服务器上安装word。现在我在我的应用程序中引用word.interopp程序集。 有没有更好的方法来解决这个问题。
谢谢和问候
Vickey Y.
答案 0 :(得分:3)
如果您在服务器上没有安装Office时尝试使用Office Interop,那么它显然会失败。
您可以在不同的服务器上安装Word并公开某种Web服务来为您创建文档并将文件内容提供回原始服务器以进行保存吗?
您可以使用一些可以生成相关Word格式的第三方库,但我不知道。
它必须是什么格式?这是一份复杂的文件吗?你能用RTF吗?
答案 1 :(得分:3)
我们使用名为Aspose.Word的第三方工具。这使您可以执行一大堆Word相关的东西,而无需在服务器上安装Word本身。
答案 2 :(得分:2)
word.interop使用word实例生成并保存文档。即使它没有显示UI,WINWORD的进程也将运行。简而言之,您需要在服务器上安装word才能使用word.interop。当我们这样做时,我们也遇到了服务器需要与word 2007文档兼容的问题,因此使用Word并不是一件容易的事。希望你能解决这个问题:)
答案 3 :(得分:2)
我认为你可以做这样的事情。 我应该允许您从服务器打开文档。
protected void btnCreateWordBulletin_Click(object sender, EventArgs e)
{
String a= Server.MapPath("/Solution/Templates/Sport/Sport.doc");
String b= Server.MapPath("/Solution/Templates/Sport/SportSave.doc");
CreateWordDocument(a, b);
}
protected void CreateWordDocument(object fileName, object saveAs)
{
//Set Missing Value parameter - used to represent
//a missing value when calling methods through interop
object missing = System.Reflection.Missing.Value;
//Setup the Word.App class
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
Microsoft.Office.Interop.Word.Document aDoc = null;
// Check to see that file exists
if (System.IO.File.Exists((string)fileName))
{... Activating doc etc...}}
答案 4 :(得分:1)
是的,您可以在服务器上运行Word。但请注意,从Web服务打开winword.exe进程可能会将winword.exe作为ASPNET用户启动。某些版本的MS word在首次运行时显示了一些自定义模式形式,因此无法在服务器环境中自动执行Word的过程。解决方案是使ASPNET成为“启用登录”的用户,以ASPNET用户身份登录服务器,手动运行Word,关闭所有首次配置模式表单,然后将ASPNET用户设置为正常状态。由于这些配置窗口仅在第一次运行winword时出现(更准确地说:直到配置被用户批准),这实际上有效。
注意:在服务器上使用winword需要一些法律调查。据我所知,MS对这种解决方案的态度是相当消极的,而一些法律系统则认为它完全没问题。还要考虑管理winword进程的需要,而且......事实上,这有点粗暴。
答案 5 :(得分:0)
如果您需要真正的DOC和DOCX(而不是RTF或其他格式),OfficeWriter是另一种潜在的解决方案:
答案 6 :(得分:0)
查看OpenXML,默认情况下保存所有word(和Office)文档的文件格式。 http://openxmldeveloper.org/