Ich bin auf der Suche nach einem Makro, nennen wir es Macro01 von WorkSheet01 auf WorkSheet02.Ausführen eines Excel-Makros über C#: Ausführen eines Makros aus einer Arbeitsmappe auf einer anderen?
Mit Microsoft.Office.Interop.Excel Namespace Ich habe ein WorkSheet01 geöffnet.
public void Main_CodedStep()
{
// Object for missing (or optional) arguments.
object oMissing = System.Reflection.Missing.Value;
// Create an instance of Microsoft Excel
Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
// Make it visible
oExcel.Visible = true;
// Open Worksheet01.xlsm
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook = null;
oBook = oBooks.Open("C:\\Users\\Admin\\Documents\\Worksheet01.xlsm", oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
}
Ich verwende dann ein automatisiertes Skript, um einen Bericht zu ziehen. Dieser Bericht wird über die Download-Aufforderung von IE und nicht über das Interop geöffnet.
Das Problem kommt, wenn ich versuche, das Makro über C# zu laufen (habe ich wieder eine neue Excel.ApplicationClass(); nur so kompiliert, ich glaube, das ist eine meiner Fehltritte ist.)
public void FirstMacro_CodedStep()
{
// Create an instance of Microsoft Excel
Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
Console.WriteLine("ApplicationClass: " + oExcel);
// Run the macro, "First_Macro"
RunMacro(oExcel, new Object[]{"Worksheet01.xlsm!First_Macro"});
//Garbage collection
GC.Collect();
}
private void RunMacro(object oApp, object[] oRunArgs)
{
oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs);
}
Wenn Diese Methode führt das Makro aus Worksheet01 auf Worksheet01 statt Worksheet02 aus. Außerdem suchte er nach dem Arbeitsblatt in Meine Dokumente, also zog ich es um, um zu sehen, was passieren würde.
Recap:
- öffnen Worksheet01
- Via Scripting erhalten und öffnen Sie einen Bericht (Worksheet02) von MSIE
- Run Macro01 von Worksheet01 auf Worksheet02
Ressourcen:
http://support.microsoft.com/kb/306683
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.aspx
Für diejenigen, die versuchen möchte es diese zu Ihrem using-Direktiven hinzu:
using System.Reflection;
using Microsoft.Office.Core; //Added to Project Settings' References from C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14 - "office"
using Excel = Microsoft.Office.Interop.Excel; //Added to Project Settings' References from C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14 - "Microsoft.Office.Interop.Excel"
Bitte überprüfen Sie dieses http://stackoverflow.com/questions/27166341/run-microsoft-office-macro-using-c-sharp –