2013-05-10 42 views
0

我想在我的Asp.net应用程序中创建一个进程,它将打开一个Microsoft Word模板(存储在服务器上)并编辑文档中的特定字段,然后下载文件传输到用户桌面。这在我的本地服务器上工作正常,但是当推送到我们的生产服务器时,它失败(没有错误或警告)。下面是我的代码有:使用ASP.Net自动化Word文档处理

location = mappedPath & ConfigurationManager.AppSettings("defaultTemplate") 
Dim objWordApp As New Microsoft.Office.Interop.Word.Application 
objWordApp.Visible = False 
Dim objDoc As Word.Document = objWordApp.Documents.Open(location) 
objDoc.Activate() 
objDoc.Content.Find.Execute(FindText:="[SomeField]", ReplaceWith:=myField, Replace:=Word.WdReplace.wdReplaceAll) 
objDoc.Content.Find.Execute(FindText:="[someId]", ReplaceWith:=myId, Replace:=Word.WdReplace.wdReplaceAll) 
outputLocation = mappedPath & "Temp/Posting_" & Now.ToString("MMddyyyy_hhmmss") & ".docx" 
objDoc.SaveAs(outputLocation) 

objDoc.Close(Word.wdSaveOptions.wdDoNotSaveChanges) 
objDoc = Nothing 
objWordApp.Quit(Word.wdSaveOptions.wdDoNotSaveChanges) 
objWordApp = Nothing 

的代码,然后继续到outputlocation发送到RESPONSE.WRITE缓冲,就像这样:

Dim fi As FileInfo = New FileInfo(outputLocation) 
    If fi.Exists Then 
    Response.Clear() 
    Response.ClearHeaders() 
    Response.ClearContent() 
    Response.Charset = "UTF-8" 
    Response.ContentEncoding = System.Text.Encoding.UTF8 
    Response.AddHeader("content-disposition", "attachment; filename=" + Server.UrlEncode(fi.Name)) 
    Response.AddHeader("Content-Type", "application/msword") 
    Response.ContentType = "application/msword" 
    Response.AddHeader("Content-Length", fi.Length.ToString()) 
    Response.WriteFile(fi.FullName) 
    HttpContext.Current.ApplicationInstance.CompleteRequest() 
Else 
    'log it 
End If 

此代码失败,在服务器上,在这行:

Dim objDoc As Word.Document = objWordApp.Documents.Open(location) 

从我读过的,微软不支持服务器端的Office产品的自动化。这就是说,有没有办法解决这个问题,还是有其他选择吗?我已验证运行该应用程序的服务器是否安装了Word,并且该用户具有正确的权限。

正如我所说的,我需要能够读取/编辑服务器上的文件并将文件下载到用户。如果有人有任何建议,请告诉我。

感谢

回答

0

你说,代码失败,在服务器上,在这一行:

昏暗objDoc作为Word.Document = objWordApp.Documents.Open(位置)

您能将调试器添加到应用程序并查看确切的错误是什么?

这可能是几件事情:

  1. 位置可能不正确
  2. word.dll可能无法访问
  3. 字的版本可能不同

问候,

+0

此应用程序位于服务器上,我无法调试。但是,我确实记录了任何错误。没有错误产生,它只是挂起。 – jason 2013-05-14 14:41:29

+0

@jason你能找到解决方案吗? – 2017-01-14 08:15:24