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 がインストールされており、ユーザーが適切なアクセス許可を持っていることを確認しました。
前述したように、サーバー上のファイルを読み取り/編集し、そのファイルをユーザーにダウンロードできる必要があります。誰か提案があれば、私に知らせてください。
ありがとう