如何给Excel添加用户自定义的公式

翻译 2007年10月19日 20:10:00

如何给Excel添加用户自定义的公式

Excel允许我们自定义公式。过去的方法是通过一种叫XLL的特殊DLL来实现。但是XLL不能用托管代码来写。现在,用托管代码如何实现自定义公式呢?很简单,Excel支持一种叫自动化插件的技术,可以使用C#VB.NET开发。

1. 打开Visual Studio 2005创建一个新的C#类库项目,取名叫AutomationAddIn

2. 然后在Class1.cs中添加如下的代码

using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace AutomationAddin
{
  [
ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
  public class MyFunctions
  {
   
public MyFunctions()
    {

    }

    public double MultiplyNTimes(double Number1, double Number2, double TimesToMultiply)
    {
     
double result = Number1;
      for (double i = 0; i < TimesToMultiply; i++)
      {
        result = result * Number2;
      }

      return result;
    }

    [ComRegisterFunctionAttribute]
    public static void RegisterFunction(Type type)
    {
     
Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type));
    }

    [ComUnregisterFunctionAttribute]
    public static void UnregisterFunction(Type type)
    {
     
Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type),false);
    }

private static string GetSubKeyName(Type type)
    {
     
string s = @"CLSID/{" + type.GUID.ToString().ToUpper() + @"}/Programmable";
      return s;
    }
  }
}

3. 点击菜单Project-Properties,选中Build页,勾上Register for COM interop.

4. 编译整个类库项目

5. 启动Excel,调出Add Ins对话框(0307有不同,见文后PS)

6. 点击Automation按钮,将出现Automation Servers对话框,选中我们刚刚建的AutomationAddIn.MyFunctions (此处为刚刚类库项目的命名空间名+类名)

7. 点击OK按钮(这时会出现一个对话框,选择),将回到Add Ins对话框

8. OK按钮。

9. 测试我们的函数。在一个sheetA1输入3A2输入4A3输入5。选中A4,点击公式栏中的fx按钮,跳出公式选择对话框。在分类下拉框中选择AutomationAddIn.MyFunctions, 然后选中公式MultiplyNTimes。点击OK

10. 跳出函数参数对话框,分别输入A1A2A3,点击OK

11. 回到工作表格,如下 3072 = 3*4*4*4*4*45次)

12. 由此可见,自定义的公式生效了,事实上我们还可以在类库中添加进一些更加有用的功能。随便列出几个如下:

public string GetStars(double Number)
{
 
string s = "";
  for (double i = 0; i < Number; i++)
  {
    s = s +
"*";
  }
 
return s;
}

public double AddNumbers(double Number1, [Optional] object Number2, [Optional] object Number3)
{
 
double result = 0;
  result += Convert.ToDouble(Number1);

  if (!(Number2 is System.Reflection.Missing))
  {
    Excel.
Range r2 = Number2 as Excel.Range;
    double d2 = Convert.ToDouble(r2.Value2);
    result += d2;
  }

  if (!(Number3 is System.Reflection.Missing))
  {
    Excel.
Range r3 = Number3 as Excel.Range;
    double d3 = Convert.ToDouble(r3.Value2);
    result += d3;
  }

  return result;
}

public double CalculateArea(object Range)
{
  Excel.
Range r = Range as Excel.Range;
  return Convert.ToDouble(r.Width) + Convert.ToDouble(r.Height);
}

public double NumberOfCells(object Range)
{
  Excel.
Range r = Range as Excel.Range;
  return r.Cells.Count;
}

public string ToUpperCase(string input)
{
 
return input.ToUpper();
}

 

PS:调出AddIns对话框

·         2003Menu Tools->Add Ins

·         2007Office Button->Excel Options->Add ins->Excel Add Ins

 

excel自定义公式的妙用

如何在excel中显示公式及结果
  • xujgcn
  • xujgcn
  • 2015年09月12日 00:40
  • 708

使用C#编写自定义excel函数推导矩形梁纯扭承载力估算公式

使用C#编写自定义excel函数推导矩形梁纯扭承载力估算公式 对于数据分析,excel无疑是一个强大的工具,工程中也经常使用excel编写小计算软件来进行计算辅助,例如计算钢筋面积、计算截面几何性质...

一种基于 JEP 和可配置公式实现用户自定义字段的解决方案

背景 随着 IT 技术的普及和发展,用户的信息化水平越来越高,软件产品除了满足用户的基本需求之外,还必须越来越照顾到用户的个性化需求,为用户提供深层次的个性化服务。以一个包含报表展示功能的产品为例,...

NC添加自定义显示公式方法

NC添加自定义显示公式的方法步骤大致是: 1.编写显示公式JAVA类,该类继承 import nc.vo.pub.formulaset.function.NcInnerFunction;例如:publ...

Excel从另一个Excel文件中用户自定义区域(UsedRange)拷贝数据和行高、列宽

实现环境:Visual Studio 2010, Office 2010, VSTO 4.0, .NET Framework 4.0 using System; using System.Col...

Word 或 Excel 的文档级自定义项中“文档操作”任务窗格的自定义用户界面(一)

http://technet.microsoft.com/zh-cn/subscriptions/microsoft.office.tools.actionspane.aspx ActionsPan...

如何在MyEclipse中添加 用户自定义类库

但真正解决问题的是下面几句而已:   您是不是没有将common.jar文件导入buildPath 如果没有 选中你所在的项目 右键 ->properties->buildPath->libra...

在MFC中添加用户自定义消息【转载】

在MFC中添加用户自定义消息【转载】   2012-02-09 10:17:17|  分类: visual c++ |  标签: |字号大中小 订阅 首先弄清楚...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何给Excel添加用户自定义的公式
举报原因:
原因补充:

(最多只允许输入30个字)