如何通过C#代码从文本文件加载VBAmacros到Excel文件?

我的C#代码必须创build一个带有两个工作表的Excel文件,并在那里输出一些数据。 除了数据列之外,Sheet 1还必须使用VBAmacros来启用,这将允许用户在点击特定单元格时使用提供的数据执行一些math计算。 这个VBAmacros存储在一个文本文件中,如C:\VBA_MACROS\VBA1.txt.

现在我可以手动做,即

  1. C#代码创build一个Excel文件并用数据填充它。
  2. 我在Sheet1上点击右键并select一个选项“查看代码”。
  3. 我从Microsoft Visual Basic for Applications菜单上单击“插入”button并加载文件C:\VBA_MACROS\VBA1.txt
  4. 我closures了VBA代码窗口。

问题:步骤2 – 4是否可以通过C#代码以及步骤1自动执行? 在这种情况下,用户不必手动执行,这对她来说会更舒适。

确切地说,这是如何创build应用程序:

 Excel.Application application = new Excel.Application(); Excel.Workbook workbook = application.Workbooks.Add(); Excel.Worksheet worksheet = workbook.Sheets[1]; Excel.Worksheet worksheet2 = workbook.Sheets[2]; // output data to the worksheets DataTable2Worksheet(tableMain, worksheet, verSize); DataTable2Worksheet(tableExtra, worksheet2, 0); // output workbook to the file string fileDir = @"D:\MyTests\ExcelTests\"; Output2File(fileDir, workbook); 

DataTable2WorksheetOutput2File函数是相当微不足道的,但如何通过使用AddFromFile方法将文本文件的内容附加到worksheet = workbook.Sheets[1]

你需要一个对Microsoft.Vbe.Interop;的引用Microsoft.Vbe.Interop;

然后,您需要获取要插入的模块的句柄。 然后,您可以使用CodeModule.AddFromFile方法将代码插入到您的文本文件中。

 VBE.VBProjects("NameOfProject").VBComponents.Item("NameOfWorksheet").CodeModule.AddFromFile("C:\Path\to\file.txt"); 

新创build的项目的默认名称是"VBAProject"并且表单的组件名称是表单的名称。

因此,对于您的特定情况,您可以在代码段的末尾添加以下代码行,将VBA插入到Sheet1中。

 application.VBE.VBProjects("VBAProject").VBComponents.Item("Sheet1").CodeModule.AddFromFile("C:\VBA_MACROS\VBA1.txt"); 

我刚刚了解到,另一个选项是使用Workbook的VBProject属性 ,这使得调用更简洁。

 workbook.VBProject.VBComponents.Item("Sheet1").CodeModule.AddFromFile("C:\VBA_MACROS\VBA1.txt");