返回Object如果为True,则使用in循环

时间:2017-08-17 15:04:19

标签: c# excel excel-vba office-interop vba

我正在使用代码来测试某些文件是否存在,如果存在,请添加它们的路径以及它们的选项卡名称(当我将它们添加到Excel时)。它的工作原理,但现在它是很多重复的代码。我想创建一个我调用的方法,如果为true则返回该对象,如果该文件不存在则返回任何内容。这是我的代码:

// 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" });
}

我多次重复这段代码,如果我做了更改,我需要对所有人进行修改。之后,我使用以下代码将它们添加为excel中的选项卡:

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

如何将该代码减少为单个方法调用?很抱歉,如果这看起来很简单,但我还没有创建任何在条件语句上返回对象的方法。

1 个答案:

答案 0 :(得分:0)

如果为true,我将返回该对象,否则返回null。

类似的东西:

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

使用它会是这样的:

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