【发布时间】:2013-02-19 15:05:07
【问题描述】:
当我打开 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
{
}
}
}
【问题讨论】:
-
提示:永远不要这样做
try{...} catch (Exception ex) {throw ex;}。您最好只省略 try/catch 块。此外,ex.Message可能会很好地显示给用户(或不显示),但如果您想知道出了什么问题,您需要ex.ToString()。请停止使用try {...} catch{...}。出了点问题 - 不要忽视这一点。 -
最后,这是一个什么样的应用程序?是控制台吗?如果它是一个 winhdows 服务或 ASP.NET 应用程序,那么你不能像那样使用 Office Interop。
-
@JohnSaunders 它是一个 ASP.net 应用程序,当我在答案中发布时,问题已经解决,我在调用课程之前做了模拟用户,它的工作很迷人
-
@JohnSaunders 都是好点,但是 try+catch+throw 不一定是坏的,但不要
thow ex;,而只需使用throw;。所以try{...} catch (Exception ex) { throw /*no argument here*/; }比您将所有信息传递给更高级别(或者如果您希望添加信息,请将其包装在一个新的异常中:throw new SomeMeaningFullException("with some meaningfull message", ex);)
标签: c# ms-word interop windows-server-2008 office-interop