Member 4611734 Ответов: 0

Как я могу сделать функцию C# (UDF) в виде формулы в excel с предиктивным поиском ее параметра в приложении excel vsto


У меня есть в Excel VSTO для приложения на C#, я хочу, чтобы вставить UDF, определенный в C# как формулу в Excel таким образом, что как только пользователь вводит в ячейки Excel, как myfunction в консоли (т. е. как только она открывает скобки, интеллектуального поиска должен быть первый параметр может находиться в winform в список или выпадающий список.

Пожалуйста, предложите любой способ сделать это , я попытался вставить формулу в Excel-ДНК , то я пытаюсь прочитать строку, как только пользователь используя асинхронные ждут на sheet_selectionchange событие, но я получаю значение null, используя "Cell.значение2" наверное, потому, что она отбирает пустое значение отбора, когда событие change происходит, а не значение, которое я ввел в задачу.Задержка(10000); исполнение.

Что я уже пробовал:

public static async void Worksheet_SelectionchangeAsync(Excel.Range Target)
      {
          string val = "";
          await Task.Delay(10000);
           Excel.Application XlApp = Globals.ThisAddIn.Application;
          //excelApp = new Excel.ApplicationClass();
          //excelApp.Visible = true;
          // System.Threading.Thread.Sleep(10000);
          string cellAdd = XlApp.ActiveCell.Left.ToString();
              Excel.Worksheet ws = (Excel.Worksheet)XlApp.ActiveWorkbook.ActiveSheet;
              int row = Target.Row;
              int col = Target.Column;
              var cell1 = Target.Value2;
              Excel.Range cell = (Excel.Range)ws.Cells[row, col];
              Excel.Range r = (Excel.Range)XlApp.Selection;
              var cell11 = r.Value2;// x.Cells[4, 7];
              // null reference error( debugger function requires all threads to run)
                // XlApp.Cells[1, 1] = cell.Value2; // null reference ( debugger function requires all threads to run)
            string i = (Globals.ThisAddIn.Application.Cells[row, col] as Excel.Range).Value2.ToString() ;
            XlApp.EnableEvents = false;
      }

0 Ответов