Excel & CheckBox [Résolu]

Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- - Dernière réponse : billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 23 mai 2008 à 09:18
Bonjour,

J'essai tant bien que mal de créer une petite fonction permettant de prendre en entrée un fichier excel et éditer la valeur des checkbox.
Cependant, après un gros parcours du net je n'arrive toujours pas à récupérer ou éditer la valeur d'un checkbox. J'ai tout essayé sans succès !

Mon fichier excel (Excel V2002) contient une checkbox mise en place grâce à la boite à outils contrôles.

Et mon code (référence à Microsoft Excel 10.0 Object Library):

using Excel;
using ExcelApplication = Excel.Application;

public static void ModifyDocument(string template, string destination)
{
ExcelApplication excel = null;
Workbook wb = null;
Worksheet ws = null;
try
{
excel = new ExcelApplication();
excel.Visible = false;
excel.DisplayAlerts = false;

wb = excel.Workbooks.Open(template, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value);

ws = (Worksheet)wb.Sheets[1];

//CheckBox ch = (CheckBox)ws.CheckBoxes("CheckBox1");//Exception !!!

foreach (Shape shp in ws.Shapes)
{
if(shp.Type.ToString() == "msoOLEControlObject")
{
if (shp.OLEFormat.progID == "Forms.CheckBox.1")
{
//Ca marche car j'arrive ici ^^
bool oleControl = true;//pour le breakpoint
//shp.ControlFormat.Value = true;//Exception !!!
//shp.OLEFormat.Object inéditable comme dans certains exemple VB
}
}
}
//Save file
wb.SaveAs(destination, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value);
}
finally
{
if (excel != null)
excel.DisplayAlerts = true;

if (wb != null)
wb.Close(false, Missing.Value, Missing.Value);

if (ws != null)
Marshal.ReleaseComObject(ws);

if (wb != null)
Marshal.ReleaseComObject(wb);

if (excel != null)
{
excel.Quit();
Marshal.ReleaseComObject(excel);
excel = null;
}
}
}

Voila, tout ce que j'ai mis en commentaire, c'est ce que je trouve sur le Net mais chez moi, ca marche pas ! (Exception)

Je m'en remet donc à vous car j'ai perdu la moitié de mes cheveux ^^
Si je trouve de mon côté, je posterai une réponse.


Billou_13
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
3
Merci
Bonjour,

Comme prévu, je reviens vers ma question car j'ai un peu avancé depuis.
Après un long périple, j'ai trouvé la réponse: 42 !

Non, plus sérieusement, la seule réponse que j'ai finis par admettre, c'est qu'il n'y avait pas de réponse et pas moyen de faire marcher ceci.


Néanmoins, nous pouvons faire marcher le template en insérant des checkboxs différents de ceux de la boîte à outils contrôle.
En effet, en ajoutant un checkbox via le code:

Shape sh = ws.Shapes.AddFormControl(XlFormControl.xlCheckBox, 1, 1, 5, 5);//A rajouter au milieu de mon exemple à la place du for each

Dans ce cas, lorsque l'on ouvre le fichier de destination, une checkbox a bien été créée ! mais différente de celle de la boite à outils.
Tant pis !!! car maintenant, ca marche, on peut accéder à la checkbox.
Comment ? voici un exemple :

foreach (Shape shp in ws.Shapes)
{
if ( (shp.Type.ToString() == "msoFormControl")
&& (shp.FormControlType.ToString() == "xlCheckBox") )
{
CheckBox chk = (CheckBox)shp.OLEFormat.Object;
cb.Value = 1;//ou 0 pour décocher. Il semblerait que les valeurs peuvent être différente et marcher quand même mais j'aime bien le 0 ou 1
}
}

J'ai pas testé par contre:
CheckBox ch = (CheckBox)ws.CheckBoxes("CheckBox1");//Avec le nom de la checkbox insérée


Voila donc pour ma conclusion,
Si vous avez mieux, je suis preneur ! (si vous avez trop de cheveux aussi, j'ai tout perdu ^^)

Bonne journée,


Billou_13

Merci billou_13 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de billou_13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.