我正在创建一个简单的应用程序,它可以合并Word和/或Excel文档中的键值对字段。直到今天,该应用程序已经很好地完成了。我使用的是最新版本的.NET Framework 4.0(因为它为Interop提供了一个很好的包装API)。我的样本合并方法如下所示:
public byte[] ProcessWordDocument(string path, List<KeyValuePair<string, string>> kvs)
{
logger.InfoFormat("ProcessWordDocument: path = {0}", path);
var localWordapp = new Word.Application();
localWordapp.Visible = false;
Word.Document doc = null;
try
{
doc = localWordapp.Documents.Open(path, ReadOnly: false);
logger.Debug("Executing Find->Replace...");
foreach (Word.Range r in doc.StoryRanges)
{
foreach (KeyValuePair<string, string> kv in kvs)
{
r.Find.Execute(Replace: Word.WdReplace.wdReplaceAll,
FindText: kv.Key,
ReplaceWith: kv.Value, Wrap: Word.WdFindWrap.wdFindContinue);
}
}
logger.Debug("Done! Saving document and cleaning up");
doc.Save();
doc.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
localWordapp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(localWordapp);
logger.Debug("Done.");
return System.IO.File.ReadAllBytes(path);
}
catch (Exception ex)
{
// Logging...
// doc.Close();
if (doc != null)
{
doc.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
}
localWordapp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(localWordapp);
throw;
}
}
上面的C#代码段已经安装好了(编译并部署到Windows Server 2008 x64)并安装了最新的更新。但现在,突然间,我得到以下奇怪的错误:
System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索CLSID为{000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(来自HRESULT的异常: 0x80080005(CO_E_SERVER_EXEC_FAILURE))。 在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean&amp; canBeCached,RuntimeMethodHandleInternal&amp; ctor,Boolean&amp; bNeedSecurityCheck) 在System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache) at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean skipCheckThis,Boolean fillCache) 在System.Activator.CreateInstance(Type type,Boolean nonPublic) 在C:\ meeho \ src \ webservices \ Meeho.Integration \ OfficeHelper.cs中的Meeho.Integration.OfficeHelper.ProcessWordDocument(String path,List`1 kvs):第30行 在Meeho.IntegrationService.ConvertDocument(Byte []模板,字符串ext,String []字段,字符串[]值)在C:\ meeho \ src \ webservices \ MeehoService \ IntegrationService.asmx.cs:第49行
- 我用Google搜索了COM错误,但它没有返回特定值。我甚至使用mmc -32为COM dll提供了正确的权限,我分别分配了Word和Excel文档,并将执行权限设置为管理员。但是,我无法通过上面给出的确切COM CLSID找到dll。很沮丧。
请,请帮助我,因为该应用程序目前已停止生产。
的Anders
编辑:Windows事件日志的输出: 错误应用程序名称:WINWORD.EXE,版本:12.0.6514.5000,时间戳:0x4a89d533 故障模块名称:未知,版本:0.0.0.0,时间戳:0x00000000 异常代码:0xc0000005 故障偏移:0x00000000 错误进程id:0x720 故障应用程序启动时间:0x01cac571c4f82a7b 错误应用程序路径:C:\ Program Files(x86)\ Microsoft Office \ Office12 \ WINWORD.EXE 错误模块路径:未知 报告编号:041dd5f9-3165-11df-b96a-0025643cefe6
- 1000 2 100 0x80000000000000 2963 应用 meeho3 - WINWORD.EXE 12.0.6514.5000 4a89d533 未知 0.0.0.0 00000000 C0000005 00000000 720 01cac571c4f82a7b C:\ Program Files(x86)\ Microsoft Office \ Office12 \ WINWORD.EXE 未知 041dd5f9-3165-11df-B96A-0025643cefe6
答案 0 :(得分:0)
重新安装Office 2007 Enterprise Ed。解决了这个问题。但令人头疼的是什么。