我正在开发一个excel插件与我的以下代码。我创建了一个类库,并添加了以下代码
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函数。我的问题是,当我从单元格调用该函数时,结果显示在相同的单元格中,而我希望结果在被调用的单元格以外的任何单元格中播放。我完全不知道,因为我无法到达任何方向。请帮帮忙
发布于 2013-02-11 21:31:49
要将结果放在另一个单元格中,只需将结果作为数组返回。因此,作为另一个版本的MultiplyNTimes函数的示例,可以将其编写为:
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数组作为结果数据类型。
例如,您可以这样重写它:
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;
}https://stackoverflow.com/questions/14751601
复制相似问题