none
自定义公式无法得到静态属性值 RRS feed

  • 问题

  • 用vs2010开发自定义公式,但在自定义公式中无法获得该application?该对象已经在启动时就赋值了。
    
    namespace UDFTest
    {
        public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
                <strong>ExcelApp.App = this.Application;</strong>
            }
    
          ........
        }
    }
    
    用静态属性记录启动的application的类。
    using Microsoft.Office.Interop.Excel;
    namespace UDFTest
    {
        public class ExcelApp
        {
            private static Application app;
            public static Application App
            {
                get { return ExcelApp.app; }
                set { ExcelApp.app = value; }
            }
        }
    }
    定义一个公式:GetAppName()
    using System.Runtime.InteropServices;
    using Microsoft.Win32;
    using System;
    namespace UDFTest
    {
        [Guid("05DE8F39-D755-4912-B40F-EDD5EC37CEBA")]
        [ClassInterface(ClassInterfaceType.AutoDual)]
        [ComVisible(true)]
        public class UDF
        {
            public string GetAppName()
            {
                <strong>return ExcelApp.App.Name; //这句得到的 ExcelApp为null,不知为什么?    </strong>        
            }
    
            [ComRegisterFunction]
            public static void RegisterFunction(Type type)
            {
                Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type, "Programmable"));
                var key = Registry.ClassesRoot.OpenSubKey(GetSubKeyName(type, "InprocServer32"), true);
                key.SetValue("", Environment.SystemDirectory + @"\mscoree.dll", RegistryValueKind.String);
            }
    
            [ComUnregisterFunction]
            public static void UnregisterFunction(Type type)
            {
                Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type, "Programmable"), false);
            }
    
            private static string GetSubKeyName(Type type, string subKeyName)
            {
                var s = new System.Text.StringBuilder();
                s.Append(@"CLSID\{");
                s.Append(type.GUID.ToString().ToUpper());
                s.Append(@"}\");
                s.Append(subKeyName);
                return s.ToString();
            }
        }
    }
    
    


    2011年12月23日 2:15

全部回复