Я пытаюсь запустить макрос слова, используя c #.
object oMissing = System.Reflection.Missing.Value;
// Create an instance of Word, make it visible,
// and open Doc1.doc.
ApplicationClass oWord = new ApplicationClass();
oWord.Visible = true;
Documents oDocs = oWord.Documents;
object oFile = @"E:\doc1.doc";
// If the Microsoft Word 10.0 Object Library is referenced
// use the following code.
//_Document oDoc = oDocs.Open(ref oFile, ref oMissing,
// ref oMissing, ref oMissing, ref oMissing, ref oMissing,
// ref oMissing, ref oMissing, ref oMissing, ref oMissing,
// ref oMissing, ref oMissing, ref oMissing, ref oMissing,
// ref oMissing);
// If the Microsoft Word 11.0 Object Library is referenced comment
// the previous line of code and uncomment the following code.
_Document oDoc = oDocs.Open(ref oFile, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
// Run the macros.
RunMacro(oWord, new Object[] { "ExternalizeFromApp" });
// Quit Word and clean up.
oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oDoc);
oDoc = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(oDocs);
oDocs = null;
oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWord);
oWord = null;
И метод RunMacro
private void RunMacro(object oApp, object[] oRunArgs)
{
oApp.GetType().InvokeMember("Run",
System.Reflection.BindingFlags.Default |
System.Reflection.BindingFlags.InvokeMethod,
null, oApp, oRunArgs);
}
макрос находится в шаблоне, который прикреплен к документу. но я получаю Невозможно запустить указанный макрос, и во внутреннем исключении ничего нет. если я иду к самому документу и запускаю макрос вручную, он работает.
UPDATE:
System.Reflection.TargetInvocationException было обнаружено
Сообщение = "Исключение было сгенерировано целью вызова."
Источник = "mscorlib"
Трассировки стека:
at System.RuntimeType.InvokeDispMethod (имя строки, BindingFlags invokeAttr, цель объекта, аргументы объекта [], логическое значение [] byrefModifiers, культура Int32, строка [] namedParameters)
в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, связыватель связывания, объектная цель, Object [] provideArgs, модификаторы ParameterModifier [], CultureInfo culture, String [] namedParams)
в System.Type.InvokeMember (имя строки, BindingFlags invokeAttr, связыватель Binder, цель объекта, аргументы объекта [])
в IMGDoc2Pdf.Main.RunMacro (Object oApp, Object [] oRunArgs) в C: \ Users \ xxx \ yyy \ Visual Studio 2008 \ Projects \ Project1 \ Project \ app \ Main.cs: строка 639
InnerException: System.Runtime.InteropServices.COMException
HelpLink = "wdmain11.chm # 37401"
Сообщение = "Невозможно запустить указанный макрос"
Источник = "Microsoft Word"
ErrorCode = -2147352573
InnerException:
Может кто-нибудь сказать мне, как решить эту проблему?