Dans Excel VSTO Document-Level Customizations, comment puis-je passer "Globals.Sheetn" aux parameters qui prévoient une interface Excel.Worksheet?

Lorsque j'écris un code dans le file de class partielle pour une feuille de calcul (Sheet8, par exemple), comment puis-je passer la class "this" en tant qu'espèce en attendant des objects avec l'interface Microsoft.Office.Interop.Excel.Worksheet?

Voici un exemple du file Sheet8.cs:

public partial class Sheet8 { private void Sheet8_startup(object sender, System.EventArgs e) { var object = new MyCustomClass(this); } } 

Et le code consommateur que j'aimerais écrire:

 class MyCustomClass { public MyCustomClass(Microsoft.Office.Interop.Excel.Worksheet sheet) { // Do something with the sheet } } 

Le problème semble être que «ceci» fait toujours reference à l'object Sheet n et ne peut pas être transmis au type d'interface nécessaire à la création d'interfaces couplées avec un code personnalisé. Aucune suggestion?

Après des semaines de search, je l'ai compris. C'est vraiment embarrassant.

Chaque object Globals.SheetN a une méthode InnerObject () qui renvoie un object avec la bonne interface. Un exemple de comment l'utiliser:

 public partial class Sheet8 { Sheet8_startup(object sender, System.EventArgs e) { var sheet = new MyCustomClass(InnerObject()); } } 

De là, vous pouvez créer des objects personnalisés et lâches dans le contenu de votre coeur!

Vous pouvez également utiliser this mot this key à la place de InnerObject() .

 public partial class Sheet8 { Sheet8_startup(object sender, System.EventArgs e) { var sheet = new MyCustomClass(this); } } 

Ensuite, pour le constructor de votre class consommasortingce, utilisez le type Microsoft.Office.Tools.Excel.WorksheetBase (au lieu du type de Worksheet ).

 class MyCustomClass { public MyCustomClass(Microsoft.Office.Interop.Excel.WorksheetBase sheet) { // Do something with the sheet } }