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
}
}