【发布时间】:2015-11-05 19:10:50
【问题描述】:
我需要使用 C# 在现有的 csv 文件上执行现有的 Excel 宏(用 VB 编写,可以使用宏编辑器从 Excel 复制)。我已经有了可用于在 xlsm 文件上执行宏的工作代码,如下所示:
using System;
using Excel = Microsoft.Office.Interop.Excel;
namespace MacroBuddy
{
public class test
{
public static void go_Macro()
{
object oMissing = System.Reflection.Missing.Value;
//create new Excel application instance
Excel.Application oExcel = new Excel.Application();
oExcel.Visible = true;
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook = null;
string path = @"C:\Users\user\Desktop\test.csv";
//open file located at path
oBook = oBooks.Open(path, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
//run Macro by referencing file and the name of the Macro
RunMacro(oExcel, new Object[] { "test.xlsm!TestMacro" });
//save and close workbook
oBook.Save();
oBook.Close(false, oMissing, oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
oBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);
oBooks = null;
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
oExcel = null;
GC.Collect();
}
private static void RunMacro(object oApp, object[] oRunArgs)
{ oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs); }
static void Main()
{ go_Macro(); }
}
}
但是,如果指定的文件是 csv 文件,则它不起作用。所以我需要帮助使类似的代码在 csv 文件上工作,或者将 csv 文件从 C# 转换为 xlsm 文件的自动化过程。
此外,能够将 VB 宏代码作为字符串并能够使用将字符串作为参数或类似过程的方法运行宏也会很有帮助。
【问题讨论】: