如何通过C#代码从文本文件中将vba宏加载到excel文件?

Evg*_*aph 4 c# excel vba

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

现在我可以手动完成,即

  1. C#代码创建一个Excel文件并用数据填充它.
  2. 我右键单击Sheet1并选择"查看代码"选项.
  3. 我单击Microsoft Visual Basic for Applications菜单中的"插入"按钮并加载该文件C:\VBA_MACROS\VBA1.txt.
  4. 我关闭了VBA代码窗口.

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

确切地说,这就是应用程序的创建方式:

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);
Run Code Online (Sandbox Code Playgroud)

DataTable2WorksheetOutput2File函数是相当简单的,但如何worksheet = workbook.Sheets[1]使用AddFromFile方法附加文本文件的内容?

Rub*_*uck 5

你需要一个参考Microsoft.Vbe.Interop;.

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

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

新创建的项目的默认名称是"VBAProject",工作表的组件名称是工作表的名称.

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

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

我刚学会了另一种选择是使用WorkbookVBProject属性,这使得调用更加清晰.

workbook.VBProject.VBComponents.Item("Sheet1").CodeModule.AddFromFile("C:\VBA_MACROS\VBA1.txt");
Run Code Online (Sandbox Code Playgroud)