Excel & CheckBox

Résolu
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
- 22 mai 2008 à 16:45
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
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

1 réponse

billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
29
23 mai 2008 à 09:18
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
3