using System; using System.IO; using Excel; namespace NDFMaker { /// /// Classe Helper pour l'utilisation de documents Excel (lecture, écriture, sauvegarde, ...) /// public class ExcelHelper : IDisposable { private string document; private Application ThisApplication; private Workbook ThisWorkbook; private Worksheet ThisSheet; public string Document { get { return document; } set { document = value; } } /// /// Obtient une nouvelle instance de ExcelHelper pour le document spécifié. /// /// Chemin complet du document à ouvrir /// Helper du document public static ExcelHelper Open(string document) { ExcelHelper oHelper = new ExcelHelper(document); oHelper.Open(); return oHelper; } private ExcelHelper(string document) { if (String.IsNullOrEmpty(document)) throw new ArgumentNullException("Le document Excel à ouvrir n'a pas été spécifié."); this.document = document; } private void Open() { if (String.IsNullOrEmpty(document)) return; if (!File.Exists(document)) throw new FileNotFoundException("Le document Excel " + document + " n'a pas été trouvé."); try { ThisApplication = new Excel.ApplicationClass(); ThisWorkbook = ThisApplication.Workbooks.Open( document, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ThisSheet = (Excel.Worksheet)ThisWorkbook.Sheets[1]; } catch (Exception e) { throw new Exception("Une erreur est survenue lors de l'ouverture du document " + document, e); } } /// /// Enregistre le document en cours. /// public void Save() { ThisWorkbook.Save(); } /// /// Enregistre le document en cours sous un autre emplacement /// /// Chemin complet du nouvel emplacement public void SaveAs(string path) { ThisWorkbook.SaveAs(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); } /// /// Enregistre ou non le document en cours avant de le fermer. /// /// Indique si le document doit être enregistrer avant la fermeture public void Close(bool save) { ThisWorkbook.Close(save, Type.Missing, Type.Missing); ThisSheet = null; ThisWorkbook = null; ThisApplication = null; } /// /// Ecrit une valeur dans une cellule spécifiée. /// /// Référence de la cellule dans laquelle écrire /// Texte à écrire dans la cellule /// WriteSingleCell("A1", "test") public void WriteSingleCell(string cell, string value) { Excel.Range ThisRange = ((Excel.Range)ThisSheet.get_Range(cell, cell)); ThisRange.Value2 = value; ThisRange = null; } /// /// Lit la valeur d'une cellule. /// /// Référence de la cellule à lire /// Valeur de la cellule /// string val = ReadSingleCell("B5") public string ReadSingleCell(string cell) { Excel.Range ThisRange = ((Excel.Range)ThisSheet.get_Range(cell, cell)); object value = ThisRange.Value2; ThisRange = null; return value.ToString(); } #region Membres de IDisposable public void Dispose() { Close(false); ThisApplication = null; ThisWorkbook = null; ThisSheet = null; } #endregion } }