gpt4 book ai didi

c# - 使用 Excel 加载项

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:38 25 4
gpt4 key购买 nike

我正在使用以下代码开发一个 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 中运行良好。我能够使用返回值的 MultiplyNTimes 函数。但是我的问题是,当我从单元格调用函数时,结果显示在同一个单元格本身,而我希望结果在被调用单元格以外的任何单元格中播放。我完全无能为力,因为我无法到达任何方向。请帮忙

最佳答案

要将结果放在另一个单元格中,只需将结果作为数组返回即可。因此,作为另一个版本的 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 返回。如果您希望将其更改为不同类型的另一个值,您可以使用对象数组作为结果数据类型。

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

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

关于c# - 使用 Excel 加载项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com