以编程方式启用C#中的Excelmacros

我有一个Excel加载项,我想要执行以下操作:

  1. 检查工作簿是否有macros。
  2. 提示用户,如果他想启用macros。
  3. 如果是,则为用户启用macros。

有没有办法在C#中启用macros?

这篇文章对你很有帮助。

根据文章,我将它作为一个WinForm应用程序来实现,所以我使用MessageBox来提示用户是否要启用macros。

在执行此操作之前,必须在“xlsm”工作簿的[文件] – > [选项] – > [信任中心]中选中“信任访问VBA项目对象模型”。

 using VBA = Microsoft.Vbe.Interop; using Excel = Microsoft.Office.Interop.Excel; private void ReadExcel() { string filePath = @"C:\temp\Macro.xlsm"; Microsoft.Office.Interop.Excel.Application appExcel = null; Microsoft.Office.Interop.Excel.Workbooks workbooks = null; Microsoft.Office.Interop.Excel.Workbook workbook = null; object oMiss = System.Reflection.Missing.Value; appExcel = new Microsoft.Office.Interop.Excel.Application(); appExcel.DisplayAlerts = true; appExcel.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityByUI; // Make the excel visible appExcel.Visible = true; workbooks = appExcel.Workbooks; workbook = workbooks.Open(filePath, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss, oMiss); if (workbook.HasVBProject) // Has macros { try { // Show "Microsoft Excel Security Notice" prompt var project = workbook.VBProject; } catch (System.Runtime.InteropServices.COMException comex) { // Macro is enabled. } } workbook.Close(true, oMiss, oMiss); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); workbook = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); workbooks = null; appExcel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel); appExcel = null; }