こんにちは、私は手に頭を悩ませています。次のコードは私のサーバーで実行され、意図したとおりに機能します。
public void RenderWithData(string strcaseno, string strdocpath, string strdocsp, string stramnt)
{
Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application[];
string suffix = Convert.ToString(DateTime.Now.Minute + DateTime.Now.Millisecond);
string sourceFileName = System.Web.HttpContext.Current.Server.MapPath(strdocpath);
string destFileName = System.Web.HttpContext.Current.Server.MapPath("~/Cache/" + ActiveLogin.Login + Session.SessionID.ToString + suffix + ".doc");
Word.Document docDepetal = new Word.Document();
FileInfo objFileInfo = default(FileInfo);
try {
File.Copy(sourceFileName, destFileName);
SqlSingleQuery cmd = new SqlSingleQuery(strdocsp);
cmd.AddInt("@USERID", ActiveLogin.UserID);
string ParameterName = "value0";
cmd.AddVarChar(ParameterName, 50, strcaseno);
cmd.AddMoney("@NEWCONSENT", stramnt);
cmd.Execute();
docDepetal = appWord.Documents.Open(destFileName);
Word.Bookmarks MyBookMarks = docDepetal.Bookmarks();
foreach (string bookmark in cmd.Columns.Keys) {
MyBookMarks.Item(bookmark).Range.Text = cmd.Columns.Item(bookmark).ToString();
}
docDepetal.Protect(Word.WdProtectionType.wdAllowOnlyComments, false, "password");
docDepetal.Save();
docDepetal.Close();
appWord.Quit();
Marshal.FinalReleaseComObject(appWord);
appWord = null;
objFileInfo = new FileInfo(destFileName);
DisplayDownloadDialog(objFileInfo);
} catch (Exception ex) {
ShowErrorMsg(ex.Message);
} finally {
if (appWord != null) {
if (docDepetal != null) {
docDepetal.Close();
}
appWord.Quit();
Marshal.FinalReleaseComObject(appWord);
}
if (File.Exists(destFileName)) {
File.Delete(destFileName);
}
}
}
今、私の問題は、winword.exeプロセスがサーバー上で時々閉じられず、その後開いた他のすべてのwinword.exeプロセスも閉じられないことです。これにより、「次のエラーにより、iclassfactory から clsid {00020906-0000-0000-c000-000000000046} を持つ com コンポーネントのインスタンスを作成できませんでした: 8001010a」という結果になります。ドキュメントを作成するために新しいリクエストが送信されるたびに表示されるエラー。
このコードで、この問題を解決する別の方法があるかどうかを知りたいです。
作成されるドキュメントは、実行時に入力されるテンプレートであり、サーバー上での対話を必要としないことに注意してください。
どんな助けでも大歓迎です、そして前もって感謝します。