Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

je vais tenter de vous expliquer simplement mon problème.

 

Je tente de faire en C# une routine qui puise lire et écrire un fichier Excel.

 

J'importe pour cela la référence "Microsoft.Office.Interop.Excel".

 

Mais les objets Application, worbook, worksheet sont inutilisables, ils me renvoie systématiquement une erreur.

 

Je me suis appercu que ces memes objet utilisés dans un projet "exe" fonctionnent très bien, mais plus du tout dans un projet "dll".

 

Voila j'espère avoir été clair dans mon explication.

 

Merci d'avance de vos réponses.

http://www.carpetdiem.net

Plugins pour AutoCAD

Posté(e)

Salut,

 

Un exemple de classe avec des méthode Open() et Close() à compléter pour la lecture ou l'écriture.

 

Attention aux problèmes de compatibilité, le programme ne fonctionnera pas avec des versions de Excel plus ancienne que celle avec laquelle la dll a été compilée.

 

public class ExcelReader
{
   // Champs Excel
   private _Application m_Application;
   private int m_ProcessId;
   private _Workbook m_Workbook;
   private _Worksheet m_Worksheet;

   // Propriété
   public int ProcessId
   {
       get { return m_ProcessId; }
   }

   // Constructeur
   public ExcelReader()
   {
       m_ProcessId = -1;
   }

   // Méthodes

   // Ouvre le processus Excel et le fichier donné (surchargé)
   public void Open(string Filename)
   {
       this.Open(Filename, null);
   }
   
   public void Open(string filename, string WorksheetName)
   {
       Process[] ExcelProcessBefore = Process.GetProcessesByName("EXCEL");
       m_Application = new ApplicationClass();
       Process[] ExcelProcessAfter = Process.GetProcessesByName("EXCEL");
       m_ProcessId = GetProcessId(ExcelProcessBefore, ExcelProcessAfter);
       m_Application.DisplayAlerts = false;
       m_Workbook = m_Application.Workbooks.Open(
           filename, 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);
       m_Worksheet = string.IsNullOrEmpty(WorksheetName) ?
           (_Worksheet)m_Workbook.ActiveSheet :
           GetWorksheet(WorksheetName);
   }

   // Ferme le processus Excel
   public void Close()
   {
       m_Worksheet = null;
       m_Workbook.Close(false, Type.Missing, Type.Missing);
       m_Workbook = null;
       m_Application.DisplayAlerts = true;
       m_Application.Quit();
       m_Application = null;
       Process.GetProcessById(m_ProcessId).Kill();
       m_ProcessId = -1;
   }

   // Retourne l'identifiant du processus présent dans le deuxième paramètre et absent du premier.
   private int GetProcessId(Process[] ExcelProcessBefore, Process[] ExcelProcessAfter)
   {
       bool isThisProcess = false;
       int result = -1;
       if (ExcelProcessBefore.Length == 0 && ExcelProcessAfter.Length == 1)
           result = ExcelProcessAfter[0].Id;
       else
       {
           foreach (Process processAfter in ExcelProcessAfter)
           {
               isThisProcess = true;
               foreach (Process processBefore in ExcelProcessBefore)
               {
                   if (processAfter.Id == processBefore.Id)
                   {
                       isThisProcess = false;
                   }
               }
           if (isThisProcess)
               result = processAfter.Id;
           }
       }
       return result;
   }

   // Retourne l'instance de la feuille donnée en paramètre, null si elle n'existe pas.
   private _Worksheet GetWorksheet(string worksheetName)
   {
       foreach (_Worksheet worksheet in m_Workbook.Worksheets)
       {
           if (worksheet.Name == worksheetName)
               return worksheet;
       }
       return null;
   }
}

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité