使用ASP.Net自动化Word文档处理

时间:2013-05-10 13:07:35

标签: asp.net vb.net office-interop

我正在尝试在我的Asp.net应用程序中创建一个进程,该进程将打开Microsoft 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)

根据我的阅读,Microsoft不支持服务器端的Office产品自动化。话虽这么说,有没有办法解决这个问题还是有替代方案?我已经验证运行应用程序的服务器已安装Word并且用户具有正确的权限。

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

感谢

1 个答案:

答案 0 :(得分:0)

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

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

您是否可以向应用程序添加调试器并查看确切的错误是什么?

可能有几件事:

  1. 位置可能不正确
  2. word.dll可能无法访问
  3. 单词的版本可能不同
  4. 此致