2017-08-17 1 views
0

J'utilise du code pour tester si certains fichiers existent et s'ils le font, ajoutez leur chemin et leur nom d'onglet (lorsque je les ajoute à Excel). Cela fonctionne mais maintenant c'est beaucoup de code dupliqué. Je veux créer une méthode que j'appelle et retourne l'objet si vrai, et rien si le fichier n'existe pas. Voici le code que j'ai:Renvoyer l'objet si True puis utiliser dans la boucle

// Add Open_SI 
if (File.Exists(CurrentWorkbook.DataPath + "OPEN_SI-en-us.xlsx")) 
{ 
     FileInfo OpenSI = new FileInfo(CurrentWorkbook.DataPath + "OPEN_SI-en-us.xlsx"); 
     if (OpenSI.Length > 5000) 
       File.Copy(CurrentWorkbook.DataPath + "OPEN_SI-en-us.xlsx", CurrentWorkbook.DataPath + "OPEN_SI.xlsx", true); 

     if (File.Exists(CurrentWorkbook.DataPath + "OPEN_SI.xlsx")) 
       worksheets.Add(new WorkSheets() { Path = (CurrentWorkbook.DataPath + "OPEN_SI"), TabName = "SI" }); 
} 

// Add Pipe Sheet 
if (File.Exists(CurrentWorkbook.DataPath + "Pipe_Supply-en-us.xlsx")) 
{ 
     FileInfo Pipe = new FileInfo(CurrentWorkbook.DataPath + "Pipe_Supply-en-us.xlsx"); 
     if (Pipe.Length > 5000) 
       File.Copy(CurrentWorkbook.DataPath + "Pipe_Supply-en-us.xlsx", CurrentWorkbook.DataPath + "Pipe.xlsx", true); 

     if (File.Exists(CurrentWorkbook.DataPath + "Pipe.xlsx")) 
       worksheets.Add(new WorkSheets() { Path = (CurrentWorkbook.DataPath + "Pipe"), TabName = "Pipe" }); 
} 

Je répète ce code plusieurs fois et si je fais des changements bien sûr que je dois le faire pour tous. Après cela, je les ajoute sous forme d'onglets dans Excel avec ce code:

for (var i = 0; i < worksheets.Count; i++) 
{ 
     excelApp.Run("CopySheets", worksheets[i].Path, worksheets[i].TabName, CurrentWorkbook.Version) 
} 

Comment puis-je réduire ce code à un seul appel de méthode? Désolé si cela semble simple, mais je n'ai pas encore créé de méthodes qui retournent des objets sur des instructions conditionnelles.

+0

Savez-vous comment créer des méthodes? Que diriez-vous de retourner des résultats simples à partir d'un seul? Utiliser des conditions pour retourner des résultats différents d'une méthode n'est pas beaucoup plus complexe que cela ... Essayez simplement de créer une nouvelle méthode et dites-nous à quoi exactement vous avez un problème. –

Répondre

0

Je retournerais l'objet si vrai, et null sinon.

quelque chose comme ceci:

MyType CheckFile(string fn){ 
    MyType myObject = new MyType(); 
    if(File.Exists(fn)) 
    { 
     //do work 
     return myObject; 
    }else{ 
     return null; 
    } 
} 

Et pour l'utiliser serait quelque chose comme:

string[] files = {"file1.xlsx","file2.xlsx"}; 
for(int i=0;i<fiels.Count;i++){ 
    MyType obj = CheckFile(files[i]); 
    if(obj != null){ 
     //object exists, do some work 
    }else{ 
     //object doesn't exist, do alternative work 
    } 
}