1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
private void ExportXL_Eleve()
{
Microsoft.Office.Interop.Excel.Application ApplicationXL;
Microsoft.Office.Interop.Excel._Workbook ClasseurXL;
Microsoft.Office.Interop.Excel._Worksheet FeuilXL;
StringBuilder errorMessages = new StringBuilder();
int i, numlig = 1;
int NbCol = 12; // Nombre de colonnes à alimenter dans le fichier excel
object[,] ContenuLigne; // Stockage dans ce tableau des champs de chaque cellule qui alimenteront une ligne dans Excel
int indexContenuLigne = -1;
int indexContenuLigneMax = 10; // Pour définir la hauteur du tableau (nombre de lignes)
ContenuLigne = new object[indexContenuLigneMax + 1, NbCol]; // Déclarer un tableau de indexContenuLigneMax lignes et de NbCol colonnes
try
{
Cursor.Current = Cursors.WaitCursor;
this.Refresh();
// Démarrer Excel et créer l'objet Application Excel
ApplicationXL = new Microsoft.Office.Interop.Excel.Application();
ApplicationXL.Visible = false; // Afficher l'application Excel
ClasseurXL = (Microsoft.Office.Interop.Excel._Workbook)ApplicationXL.Workbooks.Add(System.Reflection.Missing.Value); // Ouvrir un nouveau classeur
FeuilXL = (Microsoft.Office.Interop.Excel._Worksheet)ClasseurXL.ActiveSheet; // feuille active
FeuilXL.Name = "Registre élève inscrits";
numlig = 1;
// Création de la ligne d'entête avec le nom des champs
FeuilXL.Cells[numlig, 1] = "Inscription";
FeuilXL.Cells[numlig, 2] = "NOM";
FeuilXL.Cells[numlig, 3] = "Prenom";
FeuilXL.Cells[numlig, 4] = "Naissance";
FeuilXL.Cells[numlig, 5] = "Sexe";
FeuilXL.Cells[numlig, 6] = "Nom Tuteur";
FeuilXL.Cells[numlig, 7] = "Prenom Tuteur";
FeuilXL.Cells[numlig, 8] = "Adresse";
FeuilXL.Cells[numlig, 9] = "Code Postal";
FeuilXL.Cells[numlig, 10] = "Commune";
FeuilXL.Cells[numlig, 11] = "Ecole Précédente";
FeuilXL.Cells[numlig, 12] = "Radiation";
FeuilXL.get_Range("A1", "A1").Columns.ColumnWidth = 28; // Largeur cellule
FeuilXL.get_Range("B1", "B1").Columns.ColumnWidth = 10; // Largeur cellule
FeuilXL.get_Range("C1", "C1").Columns.ColumnWidth = 7; // Largeur cellule
FeuilXL.get_Range("D1", "D1").Columns.ColumnWidth = 7; // Largeur cellule
FeuilXL.get_Range("E1", "E1").Columns.ColumnWidth = 30; // Largeur cellule
FeuilXL.get_Range("F1", "F1").Columns.ColumnWidth = 25; // Largeur cellule
FeuilXL.get_Range("G1", "G1").Columns.ColumnWidth = 15; // Largeur cellule
FeuilXL.get_Range("H1", "H1").Columns.ColumnWidth = 9; // Largeur cellule
FeuilXL.get_Range("I1", "I1").Columns.ColumnWidth = 16; // Largeur cellule
FeuilXL.get_Range("J1", "J1").Columns.ColumnWidth = 15; // Largeur cellule
FeuilXL.get_Range("K1", "K1").Columns.ColumnWidth = 18; // Largeur cellule
FeuilXL.get_Range("L1", "L1").Columns.ColumnWidth = 30; // Largeur cellule
numlig++;
MySqlConnection conn;
string myConnectionString;
myConnectionString = "server=127.0.0.1;uid=root;pwd=;database=registreeleveinscrits;convert zero datetime=True";
conn = new MySql.Data.MySqlClient.MySqlConnection();
conn.ConnectionString = myConnectionString;
conn.Open();
String sql = "select * from eleve";
MySqlCommand Mycommand = new MySqlCommand(sql);
Mycommand.Connection = conn;
MySqlDataReader rdr = Mycommand.ExecuteReader();
if (rdr != null)
{
while (rdr.Read()) // Lire l'enregistrement suivant
{
// Optimisation de l'alimentation du fichier Excel en remplissant d'avantage du tableau "ContenuLigne"
indexContenuLigne++; // donc au départ, on commence à 0
ContenuLigne[indexContenuLigne, 0] = (rdr["inscription"].GetType().Name != "DBNull" ? Convert.ToDateTime(rdr["inscription"]).ToShortDateString() : "");
// ContenuLigne[indexContenuLigne, 0] = Convert.ToDateTime(rdr["inscription"]); // FeuilXL.Cells[numlig, 1] = rdr["NomCommune"].ToString();
ContenuLigne[indexContenuLigne, 1] = rdr["nom"].ToString();// FeuilXL.Cells[numlig, 2] = rdr["NumParcelle"].ToString();
ContenuLigne[indexContenuLigne, 2] = rdr["prenom"].ToString();
ContenuLigne[indexContenuLigne, 3] = (rdr["dateNaissance"].GetType().Name != "DBNull" ? Convert.ToDateTime(rdr["dateNaissance"]).ToShortDateString() : "");
//ContenuLigne[indexContenuLigne, 3] = Convert.ToDateTime(rdr["dateNaissance"]);
ContenuLigne[indexContenuLigne, 4] = rdr["Sexe"].ToString();
ContenuLigne[indexContenuLigne, 5] = rdr["nomTuteur"].ToString();
ContenuLigne[indexContenuLigne, 6] = rdr["prenomTuteur"].ToString();
ContenuLigne[indexContenuLigne, 7] = rdr["adresse"].ToString();
ContenuLigne[indexContenuLigne, 8] = rdr["codePostal"].ToString();
ContenuLigne[indexContenuLigne, 9] = rdr["Commune"].ToString();
ContenuLigne[indexContenuLigne, 10] = rdr["ecolePrecedente"].ToString();
DateTime? radiation;
string radiationString;
if (Convert.ToDateTime(rdr[12]) == null)
{
ContenuLigne[indexContenuLigne, 11] = "0000-00-00";
}
else
{
radiationString = rdr["radiation"].ToString();
ContenuLigne[indexContenuLigne, 11] = radiationString;
}
// Affecter le tableau "ContenuLigne" à la ligne Excel => Gain de temps intéressant (de 6min15 à 1min35 en local)
// au lieu d'affecter chacune des cellules individuellements dans excel
// Si indexContenuLigne atteint la limite indexContenuLigneMax, on décharge le tableau "ContenuLigne" dans Excel
if (indexContenuLigne == indexContenuLigneMax)
{
FeuilXL.get_Range(FeuilXL.Cells[numlig - indexContenuLigne, 1], FeuilXL.Cells[numlig, NbCol]).Value2 = ContenuLigne;
indexContenuLigne = -1;
}
numlig++;
}
// Si indexContenuLigne est différent de -1, alors le tableau "ContenuLigne" partiellement renseigné doit être déchargé dans Excel
if (indexContenuLigne != -1)
{
numlig--; // décrémenter numlig pour corriger le décalage précédent
FeuilXL.get_Range(FeuilXL.Cells[numlig - indexContenuLigne, 1], FeuilXL.Cells[numlig, NbCol]).Value2 = ContenuLigne;
Worksheet.get_Range(worksheet.Cells[numlig - indexContenuLigne, 1], worksheet.Cells[numlig, NbCol]).Value2 = ContenuLigne;
numlig++; // incrémenter numlig pour réaffecter le bon décalage
}
}
rdr.Close();
ClasseurXL.Application.ActiveWindow.FreezePanes = true;
Cursor.Current = Cursors.Default;
ApplicationXL.Visible = true; // Afficher l'application Excel
}
catch (MySqlException exc)
{
MessageBox.Show(errorMessages.ToString(), exc.TargetSite.ToString() + ": SqlException Err n° " + exc.ErrorCode);
}
catch (Exception exc)
{
MessageBox.Show("Erreur : " + exc.ToString(), exc.TargetSite.ToString());
}
} |
Partager