使用DsoFramer时禁用Excel安全对话框

我使用旧的DsoFramer控件来embedded一个Excel的实例。 这与Excel 2000,2003和2007一直工作正常。

不过到2010年,我认为它的performance略有不同。 我现在得到一个关于macros的提示,然后阻止我的用户界面,直到用户将焦点转移到后台的Excel实例,然后单击确定。

替代文字

我知道微软不再支持使用这个控制,但不幸的是,我们还没有能够取代它。 所以我正在寻找我们的方法来尝试和禁用此对话框。 我试过使用MsoAutomationSecurity.msoAutomationSecurityForceDisable枚举,但这似乎没有任何区别。 如果我直接通过代码打开文件,那么它的罚款,不会提示,但axFramer.Open()调用总是会导致它提示。 有谁知道这个方法吗?

在一个简单的WinForm应用程序中重现此问题的代码(您需要将文件pathreplace为包含macros的文件)。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using Microsoft.Office.Interop.Excel; using System.Diagnostics; namespace WindowsFormsApplication1 { public partial class Form1 : System.Windows.Forms.Form { private AxDSOFramer.AxFramerControl axFramer; public Form1() { // Kill any Excel processes first so they don't interfere with our tests KillExcelProcesses(); InitializeComponent(); try { CreateAndAddFramer(); string file = @"c:\temp\date_6490.xls"; // Create a new Excel Application. For the purpose of the test lets ensure it's visible too. Application excelApp = new Application() { Visible = true, DisplayAlerts = false }; // Set the Excel security to Forcefully disable all macros. excelApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable; // Open the file. This is because it needs to be open before trying with the DsoFramer // control. It also demonstrates that excel opens fine without prompting for any // macro support. Workbook selectedBook = excelApp.Workbooks.Open(file); // Open the file in the framer. This will now prompt to enable macros. axFramer.Open(file, true, null, null, null); } catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.ToString()); KillExcelProcesses(); } } /// <summary> /// Creates a DsoFramer and adds to the form. /// </summary> private void CreateAndAddFramer() { // Create an axFramer control this.axFramer = new AxDSOFramer.AxFramerControl(); // Initialize the axFamer ((System.ComponentModel.ISupportInitialize)(this.axFramer)).BeginInit(); // Update the name of the framer (bug in framer) this.axFramer.Name = "framer_" + Guid.NewGuid().ToString(); this.axFramer.ResetText(); // Dock the framer and add to the form this.axFramer.Dock = System.Windows.Forms.DockStyle.Fill; this.Controls.Add(axFramer); ((System.ComponentModel.ISupportInitialize)(this.axFramer)).EndInit(); } /// <summary> /// Kills all excel processes. /// </summary> private static void KillExcelProcesses() { // Kill all instances of Excel foreach (Process p in Process.GetProcessesByName("excel")) { p.Kill(); } } } 

}

在发布Office 2010第一个testing版的同时,DsoFramer下载被删除。 这不是巧合。 OLEembedded已经死了8年。 你可以尝试致电微软支持,但我很确定他们会翻转你的鸟。 你不能保持你的应用程序目前的forms,并希望继续未来的Office版本。

这个答案不是有帮助的,只是强化你花费你的时间和精力去解决错误的问题。