// Ouverture d'une nouvelle instance vMSExcel = Variant::CreateObject("Excel.Application"); // vMSExcel.OlePropertySet("Visible", true); vMSExcel.OlePropertySet("Visible", false); // Application npn visible par l'utilisateur // vMSExcel.OlePropertySet("WindowState", -4140 ); // ??? vXLWorkbook = vMSExcel.OlePropertyGet("Workbooks"); // Récupération du pointeur vers la collection des Workbooks // Nouveau classeur vXLWorkbook = vXLWorkbook.OleFunction("Add"); // Ajout d'un nouveau Workbook à la collection vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets","Feuil1"); // On active le sheet par défaut "Feuil1" vWorksheet = vWorksheet.OlePropertyGet("Cells"); nbre_lignes = Trace_courbe->courbes_data[num_fichier_a_sauver].x->n; int colonne; int NumCol = 65; // "A" code ASCII 65 (réf. à la 1ère colonne sous Excel) int NumLigne = 1; // Titre première colonne AnsiString Ref = ""; // contiendra la référence à la cellule Excel, i.e. "A1" Ref.cat_sprintf("%c%d", NumCol, NumLigne); // donne "A1" pour 65 et 1 vRange = StringToOleStr(Ref); // Ref est converti en Range (bien qu'il s'agisse toujours d'un Variant) vCell = vWorksheet.OlePropertyGet("Range", vRange);// récupération du pointeur vers la cellule sélectionnée ("A1") vValue = StringToOleStr(TitreCol1); // "Temps(s)"; vCell.OlePropertySet("Value", vValue); // affectation de la valeur de la requête à la cellule référencée ("A1") // Titre deuxième colonne Ref = ""; // contiendra la référence à la cellule Excel, i.e. "B1" Ref.cat_sprintf("%c%d", NumCol + 1, NumLigne); // donne "A1" pour 65 et 1 vRange = StringToOleStr(Ref); // Ref est converti en Range (bien qu'il s'agisse toujours d'un Variant) vCell = vWorksheet.OlePropertyGet("Range", vRange);// récupération du pointeur vers la cellule sélectionnée ("A1") vValue = StringToOleStr(TitreCol2); vCell.OlePropertySet("Value", vValue); // affectation de la valeur de la requête à la cellule référencée ("A1") if (nbre_colonnes == 3) { // Titre deuxième colonne Ref = ""; // contiendra la référence à la cellule Excel, i.e. "C1" Ref.cat_sprintf("%c%d", NumCol + 2, NumLigne); // donne "A1" pour 65 et 1 vRange = StringToOleStr(Ref); // Ref est converti en Range (bien qu'il s'agisse toujours d'un Variant) vCell = vWorksheet.OlePropertyGet("Range", vRange);// récupération du pointeur vers la cellule sélectionnée ("A1") vValue = StringToOleStr(TitreCol3); vCell.OlePropertySet("Value", vValue); // affectation de la valeur de la requête à la cellule référencée ("A1") } // Ecriture des valeurs for (colonne = 1; colonne <= nbre_colonnes; colonne++) { for (ligne = NumLigne + 1; ligne <= NumLigne + nbre_lignes; ligne++) { Ref = ""; // contiendra la référence à la cellule Excel, i.e. "A1" Ref.cat_sprintf("%c%d", NumCol + colonne - 1, ligne); // donne "A1" pour 65 et 1 vRange = StringToOleStr(Ref); // Ref est converti en Range (bien qu'il s'agisse toujours d'un Variant) vCell = vWorksheet.OlePropertyGet("Range", vRange);// récupération du pointeur vers la cellule sélectionnée ("A1") if (colonne == 1) { vValue = StringToOleStr(Trace_courbe->courbes_data[num_fichier_a_sauver].x->P[ligne - NumLigne - 1][0]); } else if (colonne == 2) { vValue = StringToOleStr(Trace_courbe->courbes_data[num_fichier_a_sauver].y->P[ligne - NumLigne - 1][0]); } else if (colonne == 3) // REVOIR CE CAS (on sauve quoi ??) { vValue = StringToOleStr(Trace_courbe->courbes_data[num_fichier_a_sauver].y->P[ligne - NumLigne - 1][0]); } vCell.OlePropertySet("Value", vValue); // affectation de la valeur de la requête à la cellule référencée ("A1") } } FileFormat = -4143; // valeur de xlNormal "sauvegarde sous format classeur excel" // creation d'une copie si le fichier existe deja CreateBackup = false; //Unassigned; // creation d'une copie (False True Unassigned) vFileName = StringToOleStr(nom_fichier_a_sauver + "x"); // le nom de fichier de la SaveDialog est converti au format OLE vMSExcel.OlePropertySet("DisplayAlerts", true); // on désactive les DisplayAlerts d'Excel (pour éviter les messages d'overwriting d'Excel) vXLWorkbook.OleProcedure("Saveas", vFileName); // sauvegarde du fichier sous le nom préalablement sélectionné vSaveChanges = true; // true : modif save, false : not save, Unassigned : demande à l'utilisateur vXLWorkbook.OleFunction("Close", vSaveChanges, vFileName); // fermeture du classeur qui a recueilli les données vMSExcel.OlePropertySet("DisplayAlerts", true); // réactivation des DisplayAlerts vMSExcel.OleFunction("Quit"); // on ferme vMSExcel = Unassigned; // ... et le pointeur de son instance est réinitialisé