Quello che sto cercando di fare è creare UDF (User Defined Functions) per Excel usando il tipo di progetto CTO "Excel 2007 Add-in" di VSTO (dato che ho appena vuoi generare alcune UDF generali). Come sto solo cercando di imparare le basi (in questa fase comunque) questo è ciò che il mio codice è simile:Come creare facilmente un UDF di Excel con il progetto del componente aggiuntivo VSTO
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Tools.Excel.Extensions;
using System.Runtime.InteropServices;
namespace ExcelAddIn1
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{}
//My UDF
public static double HeronicCal(int a, int b, int c)
{
//first compute S = (a+b+c)/2
double S = (a + b + c)/2;
double area = Math.Sqrt(S * (S - a) * (S - b) * (S - c));
return area;
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
Si compila bene, e quando l'eseguo, Excel si apre con un foglio di calcolo fresca, e quando Guardo la lista dei "Componenti aggiuntivi" (nelle opzioni di Excel) Posso vedere il mio componente aggiuntivo nell'elenco (che è impostato su "Carica all'avvio"). Ma ecco che arriva il mio problema, quando provo a chiamare la mia UDF da dentro con Excel, Excel non riesce a trovare il metodo!
Quello che immagino sia sbagliato, è che devo taggare il mio metodo come UDF di Excel (usando le parentesi quadre - come ad esempio fatto quando si codificano i webservices -> "[WebService]"). Ma non sono stato in grado di rintracciare questo tag (e dato che non ne sono affatto sicuro se la mia impressione è corretta), ed è per questo che ho deciso di andare da voi brave persone qui a SO.
Quindi la mia domanda è fondamentalmente - da dove sono con il mio codice c'è un modo semplice per rendere accessibile la mia UDF in Excel? Se sì, come?
Vorrei davvero rimanere all'interno dei tipi di progetto VSTO (componente aggiuntivo, cartella di lavoro, modello), poiché il mio obiettivo generale per il mio progetto corrente è stabilire se l'esecuzione C# UDF con VS2010/Excel2007 funziona in un velocità accettabile Per testare questo sto lavorando su Windows7RC e con il VS1010 beta1.
Questa risposta dovrebbe essere più in alto su IMHO. Niente librerie di party in 3D e piccolissime lastre sono grandi professionisti. – Sebastiaan