首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Excel加载项

使用Excel加载项
EN

Stack Overflow用户
提问于 2013-02-07 20:53:20
回答 1查看 277关注 0票数 2

我正在开发一个excel插件与我的以下代码。我创建了一个类库,并添加了以下代码

代码语言:javascript
复制
using System;
using System.Collections.Generic;
 using System.Linq;
 using System.Text;
  using System.Runtime.InteropServices;
  using Microsoft.Win32;

  namespace MyCustomAutomation
  {

// Replace the Guid below with your own guid that

// you generate using Create GUID from the Tools menu

[Guid("5268ABE2-9B09-439d-BE97-2EA60E103EF6")]
[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, "Programmable"));

        RegistryKey key = Registry.ClassesRoot.OpenSubKey(

          GetSubKeyName(type, "InprocServer32"), true);

        key.SetValue("",

          System.Environment.SystemDirectory + @"\mscoree.dll",

          RegistryValueKind.String);
    }

    [ComUnregisterFunctionAttribute]
    public static void UnregisterFunction(Type type)
    {

        Registry.ClassesRoot.DeleteSubKey(

          GetSubKeyName(type, "Programmable"), false);
    }

    private static string GetSubKeyName(Type type,

      string subKeyName)
    {

        System.Text.StringBuilder s =

          new System.Text.StringBuilder();

        s.Append(@"CLSID\{");

        s.Append(type.GUID.ToString().ToUpper());

        s.Append(@"}\");

        s.Append(subKeyName);

        return s.ToString();

    }
   }
  }

我安装了它,该函数在excel中运行良好,我可以使用返回value.However的MultiplyNTimes函数。我的问题是,当我从单元格调用该函数时,结果显示在相同的单元格中,而我希望结果在被调用的单元格以外的任何单元格中播放。我完全不知道,因为我无法到达任何方向。请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-11 21:31:49

要将结果放在另一个单元格中,只需将结果作为数组返回。因此,作为另一个版本的MultiplyNTimes函数的示例,可以将其编写为:

代码语言:javascript
复制
 public double[] MultiplyNTimesNextCell(double number1, double number2, double timesToMultiply)
{
       // result[0] is the value returned on the first cell
       // result[1] is the value returned on the next cell
       double[] result = new double[] {0, number1};
       for (double i = 0; i < timesToMultiply; i++)
       {
            // hardcoded to result[1] where to return the result
            result[1] = result[1] * number2;
       }

        return result;
}

然后,当您在Excel中使用此函数时,必须使用数组公式语法,这意味着如果在A1中输入此函数,则选择单元格A1和B1,然后按F2,然后按Ctrl+Shift+Enter

还请注意,我只是使用0在输入公式的单元格中返回。如果您希望将其更改为另一个不同类型的值,则可以使用object数组作为结果数据类型。

例如,您可以这样重写它:

代码语言:javascript
复制
public object[] MultiplyNTimesObj(double number1, double number2, double timesToMultiply)
{
     object[] result = new object[] { "MultiplyNTimesObj=", number1 };
     for (double i = 0; i < timesToMultiply; i++)
     {
         result[1] = (double)result[1] * number2;
     }

     return result;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14751601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档