Работа над добавлением Excel

Я разрабатываю 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, которая возвращает значение. Однако моя проблема в том, что когда я вызываю функцию из ячейки, результат отображается в той же самой ячейке, тогда как мне нужен результат для воспроизведения в любой ячейке, отличной от вызываемой ячейки. Я совершенно не знаю, как я не могу достичь какого-либо направления. Пожалуйста помоги

2
Имея формулы, устанавливающие другие ячейки, абсолютно интуитивно понятны для пользователей Excel. Возможно, вам стоит пересмотреть свой дизайн.
добавлено автор Kendall Frey, источник
Допустим, если формула написана в A1, я хочу, чтобы Ответ был в B1 или C1.
добавлено автор Rohit, источник
Итак, какой ячейке вы хотите, чтобы результат был помещен?
добавлено автор Mark Harrell, источник

1 ответы

Чтобы получить результат в другой ячейке, просто верните результат в виде массива. Так, например, для другой версии вашей функции 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;
}
1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot