1

Word文書を開いて自分のマシンに保存している間は正常に動作しますが、サーバーにアップロードしてそこで開くと、if (doc == null)ブロックされてしまいます。行くべきではありません。

関連がない場合は質問のタイトルを更新するか、説明を求めてください。

これが私のクラスです:

using System;
using System.Collections.Generic;
using System.Web;
using Microsoft.Office.Interop.Word;

/// <summary>
/// Summary description for ClsWordExManager
/// </summary>
public class ClsWordExManager
{
     public enum Extension
        {
            WebPage = 0
        }

        private static string HtmExtension
        {
            get
            {
                return ".htm";
            }
        }

        private static Application objWordApp = null;
        private static object objMissing = System.Reflection.Missing.Value;
        private static Document doc = null;
        static ClsWordExManager()
        {
            try
            {
                objWordApp = new Application();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void InitializeClass()
        {
            objWordApp.Visible = false;
        }

        private static string Open(object strFilePath)
        {
            string str = string.Empty;
            try
            {
                objWordApp.Visible = false;
                str += "<br /> word App visiblitly false";
            }
            catch (Exception ex)
            {
                objWordApp = new Application();
                str += ex.Message;
            }
            try
            {
                doc = objWordApp.Documents.Open(ref strFilePath, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing);
                str += "<br /> word document opened";
                if (doc == null)
                {
                    // It is null when I upload it on Windows Server 2008 with office 2007 installed.
                    str += "<br /> After openging its null";
                }
            }
            catch (Exception ex)
            {
                Close();
                objWordApp.Visible = false;
                str += "<br /> word document closed with : " + ex.Message;
            }
            return str;
        }

        private static void Close()
        {
            try
            {
                doc.Close(ref objMissing, ref objMissing, ref objMissing);
            }
            catch
            {
            }
        }


        private static string SaveAs(string FilePath, string strFileExtension, WdSaveFormat objSaveFormat)
        {
            try
            {
                if (ClsCommon.IsValidUser()) // impersonating User
                {
                    FilePath = System.IO.Path.ChangeExtension(FilePath, strFileExtension);
                    try
                    {
                        if (doc != null)
                        {
                            object objFilePath = FilePath;
                            object objFormat = objSaveFormat;
                            doc.SaveAs(ref objFilePath, ref objFormat, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing, ref objMissing);
                        }
                        else
                        {
                            FilePath += "document value is null";
                        }
                    }
                    catch
                    {
                        FilePath += "<br /> Saving document throwing expe";
                        return FilePath;
                    }

                }
                else
                {
                    FilePath += "<br /> Not valid for saving file ";
                }
            }
            catch (Exception ex)
            {
                FilePath += ex.Message;
            }
            finally
            {
                Close();
            }
            return FilePath;
        }

        public static string ReadWordFile(string strFilePath, Extension objExtension)
        {
            string strFileContent = "<br /> Reading Word File could not be completed";
            try
            {
                strFileContent += Open(strFilePath);
                if (objExtension == Extension.WebPage)
                {
                    try
                    {
                        string strNewFileName = SaveAs(strFilePath, HtmExtension, WdSaveFormat.wdFormatFilteredHTML);
                        if (strNewFileName != "")
                        {
                            strFileContent += strNewFileName + ClsCommon.ReadFile(strNewFileName, true); // ignore this line as it just read html file.
                        }
                        else
                        {
                            strFileContent += "file not saved";
                        }
                    }
                    catch (Exception ex)
                    {
                        strFileContent += ex.Message;
                    }
                }
                else
                {
                    Close();
                }
            }
            catch (Exception exx)
            {
                strFileContent += exx.Message;
            }
            return strFileContent;
        }

        public static void Quit()
        {
            try
            {
                objWordApp.Quit(ref objMissing, ref objMissing, ref objMissing);
            }
            catch
            {

            }
        }
}
4

2 に答える 2

1

ASP.NET ユーザー用のデスクトップ フォルダーを作成すると、1 つの問題が解決したかもしれませんが、さらに多くの問題に遭遇することになります。Word でダイアログ ボックスが表示され、行き詰まることがあります。

Office オートメーションはサーバー側では明示的にサポートされていません。私を信じてください。多くの問題が発生します。

Office が不安定な動作を示したり、/または、この環境で Office を実行するとデッドロックが発生します。

上記の引用元のリンクにある記事を参照し、代替案を使用することをお勧めします。

于 2013-02-19T07:05:07.830 に答える
0

OK問題は解決しましたSameer Sの投稿Desktopに感謝しますサーバー2008マシン@にフォルダーを 作成するだけです

C:\Windows\System32\config\systemprofile

そして今、その作業

これに加えて、これはASP.NETアプリであるため、impersonationクラスを呼び出す前にチェックを追加し、正常に動作しました。

于 2013-02-19T05:07:03.033 に答える