我需要打开Microsoft Office Word文档并获取该文档中模块功能的结果:
VBA模块(MainModule):
Option Explicit
Public Function GetResult() As String
GetResult = "My Expected Result"
End Function
我尝试了一些代码,最新的是:[参考]
using System.Reflection;
using System.Runtime.InteropServices;
using MsWord = Microsoft.Office.Interop.Word;
using Microsoft.Office.Core;
...
var wordApp = new MsWord.Application();
wordApp.DisplayAlerts = MsWord.WdAlertLevel.wdAlertsNone;
wordApp.Visible = true;
wordApp.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable;
MsWord._Document wordDoc = wordApp.Documents.Open(ref fileNameObject, ref falseValue, ref trueValue, ref falseValue,
ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref falseValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue);
object n;
n = wordApp.Run("GetResult");
// or
n = wordApp.Run("MainModule.GetResult");
// or
n = RunMacro(wordApp, new Object[] {"MainModule.GetResult"});
// or
n = RunMacro(wordApp, new Object[] {"GetResult"});
// or
n = wordApp.Run("MainModule.GetResult", ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue, ref missingValue);
...
private static object RunMacro(object oApp, object[] oRunArgs)
{
return oApp.GetType()
.InvokeMember("Run", BindingFlags.Default | BindingFlags.InvokeMethod, null, oApp, oRunArgs);
}
RunMacro
行的错误是:
调用目标抛出了异常 . [Inner-Exception]:无法运行指定的宏
堆栈跟踪是:
at System.RuntimeType.InvokeDispMethod(String name,BindingFlags invokeAttr,Object target,Object [] args,Boolean [] byrefModifiers,Int32 culture,String [] namedParameters)
at System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams)
at System.Type.InvokeMember(String name,BindingFlags invokeAttr,Binder binder,Object target,Object [] args)
在ConsoleApplicationTest.Program.RunMacro(Object oApp,Object [] oRunArgs)中c:\ .. \ Visual Studio 2013 \ Projects \ ConsoleApplicationTest \ ConsoleApplicationTest \ Program.cs:第57行
在C:\ .. \ Visual Studio 2013 \ Projects \ ConsoleApplicationTest \ ConsoleApplicationTest \ Program.cs中的ConsoleApplicationTest.Program.Main(String [] args):第32行
注意:
我的Word文档由Office 2013保存为Office 97-2003文档 .
宏设置是启用所有宏 .
还检查了对VBA项目对象模型的信任访问 .
任何帮助将不胜感激 .
1 回答
以下在vb.net中完美运行 . 我相信你可以很容易地将它翻译成C#:
VB.Net:
VBA Word:
p.s:VS2015,Word2007,Office12
编辑令人惊讶的是,当我在我的代码中添加了你添加的安全设置,即
... = msoAutomationSecurityForceDisable
时,我失败了 . 然后我去了MSDN的页面,发现:据我了解,它必须是
MsoAutomationSecurityLow
. 这个在这里再次起作用 .