Windows Server 2008上Interop Word Document Class的对象为null-Word Open方法 [英] object of Interop Word Document Class is null on Windows Server 2008 - Word Open method

查看:86
本文介绍了Windows Server 2008上Interop Word Document Class的对象为null-Word Open方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

虽然我打开word文档并将其保存在我的机器上可以正常工作,但是当我将其上传到服务器上并在其中打开它时,它将进入if (doc == null)块,因此不应继续.

While I am opening word document and saving it on my machine its working fine, but when I am uploading it on server and opening it there, It is going in if (doc == null) block, it should not go.

请更新我的问题标题(如果不相关)或要求任何澄清.

Please update my question title if its not relevant or ask for any clarification.

这是我的课程:

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
            {

            }
        }
}

推荐答案

确定的问题已解决,感谢您

ok problem solved thanks for Sameer S post I just create Desktop folder on server 2008 machine @

C:\Windows\System32\config\systemprofile

现在可以正常工作了

此外,因为这是ASP.NET应用程序,所以我在调用类及其工作正常之前添加了impersonation检查.

And in addition of this as this is ASP.NET app, so I added impersonation check before calling class and its working fine.

这篇关于Windows Server 2008上Interop Word Document Class的对象为null-Word Open方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆