0

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 がインストールされており、ユーザーが適切なアクセス許可を持っていることを確認しました。

前述したように、サーバー上のファイルを読み取り/編集し、そのファイルをユーザーにダウンロードできる必要があります。誰か提案があれば、私に知らせてください。

ありがとう

4

1 に答える 1