Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过C代码将vba宏从文本文件加载到excel文件?_C#_Excel_Vba - Fatal编程技术网

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

C# 如何通过C代码将vba宏从文本文件加载到excel文件?,c#,excel,vba,C#,Excel,Vba,我的C代码必须创建一个包含两个工作表的Excel文件,并在那里输出一些数据。除数据列外,表1还必须启用VBA宏,该宏允许用户在单击特定单元格时使用提供的数据执行一些数学计算。此VBA宏存储在文本文件中,如C:\VBA\U macros\VBA1.txt 现在我可以手动操作,即 C代码创建一个Excel文件并用数据填充它。 我在Sheet1上单击鼠标右键,然后选择一个选项查看代码。 我单击Microsoft Visual Basic for Applications菜单中的Insert按钮,并加载

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

现在我可以手动操作,即

C代码创建一个Excel文件并用数据填充它。 我在Sheet1上单击鼠标右键,然后选择一个选项查看代码。 我单击Microsoft Visual Basic for Applications菜单中的Insert按钮,并加载文件C:\VBA\U MACROS\VBA1.txt。 我关闭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);

DataTable2Worksheet和Output2File函数非常简单,但是如何使用AddFromFile方法将文本文件的内容附加到worksheet=workbook.Sheets[1]中?

您需要对Microsoft.Vbe.Interop;的引用

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

VBE.VBProjects("NameOfProject").VBComponents.Item("NameOfWorksheet").CodeModule.AddFromFile("C:\Path\to\file.txt");
新创建的项目的默认名称为VBAProject,您可以使用图纸组件的名称作为图纸的名称

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

application.VBE.VBProjects("VBAProject").VBComponents.Item("Sheet1").CodeModule.AddFromFile("C:\VBA_MACROS\VBA1.txt");
我刚刚了解到另一个选择是使用,这使通话更干净

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