gpt4 book ai didi

c# - 在 C# 中以编程方式启用 Excel 宏

转载 作者:行者123 更新时间:2023-11-30 16:05:46 28 4
gpt4 key购买 nike

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

  1. 检查工作簿是否有任何宏。
  2. 提示用户是否要启用宏。
  3. 如果是,为用户启用宏。

有什么方法可以在 C# 中启用宏吗?

最佳答案

This article对你很有帮助。

根据这篇文章,我将其实现为 WinForm 应用程序,因此我使用 MessageBox 提示用户是否要启用宏。

在执行此操作之前,您必须在“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;
}

关于c# - 在 C# 中以编程方式启用 Excel 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33138613/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com