2009-07-16 8 views

Répondre

-1

Question intéressante. Je ne l'ai pas essayé, mais je pense que vous l'ajoutez en tant qu'élément Worksheet.Shape, ou l'ajoutez en tant qu'OLEObject. L'exemple suivant montre comment lire une case à cocher existante d'une feuille de calcul. Il est probablement un bon point de départ pour travailler à rebours à partir de:

http://forums.asp.net/p/1244356/3293168.aspx

6

Il existe deux types de contrôles que vous pouvez mettre sur une feuille de calcul, les contrôles ActiveX à partir des commandes Boîte à outils de contrôle et les formulaires des formulaires (ou dessin) barre d'outils.

En général, les deux types de contrôles sont similaires en ce sens qu'ils fonctionnent de la même manière. C'est-à-dire, une zone de texte de la barre d'outils Dessin est un contrôle dans lequel vous pouvez taper du texte. C'est fondamentalement le même que la zone de texte ActiveX. Les cases à cocher de l'un ou l'autre type sont utilisées pour sélectionner ou désélectionner une option. De toute évidence, une décision d'utiliser l'un ou l'autre dépend de leurs différences, et non de leurs similitudes. Les principales différences, pour moi de toute façon, sont les événements et le formatage. Les contrôles ActiveX donnent au concepteur de feuilles de calcul beaucoup plus de flexibilité lorsqu'il s'agit d'afficher ou de réagir à des événements de contrôles. L'affichage des propriétés d'un contrôle ActiveX montre à quel point vous pouvez en faire plus qu'avec les contrôles Forms. En outre, les contrôles Forrms ont un événement de base, l'événement click, auquel vous accédez en affectant une macro au contrôle. Les contrôles ActiveX, d'un autre côté, ont beaucoup d'événements. La liste déroulante ActiveX, par exemple, a quinze événements.

Toute cette flexibilité a un coût (vous le saviez). Les contrôles ActiveX entraînent beaucoup plus de frais généraux et ont des antécédents de buggy.

Pesant le bon et le mauvais, j'utilise toujours les contrôles Formulaires sauf si j'ai une raison particulière d'utiliser un ActiveX. Les contrôles de formulaires sont légers et simples à utiliser. Si, cependant, j'ai besoin d'une liste déroulante pour afficher une certaine police, je n'ai pas d'autre choix que d'utiliser un contrôle ActiveX. De même, si je dois éviter certains caractères dans une zone de texte, j'ai besoin de l'événement KeyPress qui n'est pas disponible dans la zone de texte Formulaires. Donc, mon conseil, et ma pratique, est d'utiliser les contrôles de formulaires, sauf si j'ai besoin de fonctionnalités que seuls les contrôles ActiveX offrent.

Formes CHECKBOX ajouter du code

ActiveSheet.CheckBoxes.Add 87, 18, 72, 17.25 

ActiveX ajouter le code Checkbox

ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _ 
    DisplayAsIcon:=False, Left:=69.75, Top:=59.25, Width:=117.75, Height _ 
    :=14.25) 

Ce code est VBA, mais peut facilement être appelé à partir de .Net via Interop

+0

Merci beaucoup pour l'aide et pour l'exemple. Je l'apprécie grandement. Par les sons de celui-ci une case à cocher formes est ce qui convient à mes besoins. –

+0

+1 Bonne réponse. :-) –

0

voici ce que j'ai utilisé pour C#

OLEObjects objs = worksheet.OLEObjects(); 
OLEObject obj = objs.Add("Forms.CheckBox.1", System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, cell.Left + 1, cell.Top + 1, cell.Width - 2, cell.Height - 2); 
obj.Object.Caption = ""; 
if (text == "TRUE") 
{ 
    obj.Object.value = true; 
} 
else 
{ 
    obj.Object.value = false; 
} 

J'utilisé cell.Left + 1, cell.Top + 1, cell.Width - 2, cell.Height - 2 pour maintenir les frontières de quatre côtés de la cellule

Questions connexes