代码之家  ›  专栏  ›  技术社区  ›  Ian

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

  •  1
  • Ian  · 技术社区  · 15 年前

    我正在使用旧的DsoFramer控件在我的表单中嵌入一个Excel实例。这在Excel 2000、2003和2007中运行良好。

    然而,2010年我认为它的表现略有不同。我现在得到了一个关于宏的提示,然后它会阻塞我的UI,直到用户将焦点转移到后台的excel实例并单击ok。

    alt text

    我知道微软不再支持使用这个控件,但不幸的是,我们还不能取代它。所以我在寻找我们的方法来尝试禁用这个对话框。我试过用 枚举,但这似乎没有任何区别。如果我直接通过代码打开文件,那么它很好,不会提示,但是axFramer.open()调用总是使它提示。有人知道怎么解决这个问题吗?

    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();
            }
        }
    }
    

    }

    1 回复  |  直到 15 年前
        1
  •  0
  •   Hans Passant    15 年前

    DsoFramer下载在Office 2010第一个beta版发布的同时被删除。这是 巧合。在过去的8年里,OLE嵌入已经像钉子一样死掉了。你可以打电话给微软技术支持部,但我敢肯定他们会让你大吃一惊的。您不能将应用程序保留为当前形式,希望以后继续使用Office版本。