.net C# Excel Interop VSTO加载项Foreach/If语句

wlzqhblo  于 2023-07-01  发布在  .NET
关注(0)|答案(1)|浏览(139)

我对C#编码相对较新,我的大部分Excel自动化都是用宏完成的。我正在尝试将我们使用的大部分自动化功能移动到VSTO插件中,以便每个人都可以轻松使用。我有下面的代码,基本上看C2,如果它匹配一个预定义的变量,写入一个特定的变量到E2,然后向下移动E列(C3为E3,等等)。下面的代码工作得很好,我只是好奇,如果有一个更简单的方法来写这个?我可以为每个预定义的变量创建foreach语句,但我想有人可能知道一种更简单的方法,可以在一个if语句下合并所有不同的变量。

string morphine15ml = "6510005510209015";
           string lorazepam30ml = "57100060001320";

           int rowNum = 1;
           foreach (Range packageSize in xlWS.Range["C2:C" + xlWSlastRow].Cells)
           {
               rowNum++;

               if (packageSize.Value == morphine15ml)
               {
                   foreach (Excel.Range columnE in xlWS.Range["E" + rowNum].Cells)
                   {
                       columnE.Value = "15";
                   }
               }
               else if (packageSize.Value == lorazepam30ml)
               {
                   foreach (Excel.Range columnE in xlWS.Range["E" + rowNum].Cells)
                   {
                       columnE.Value = "30";
                   }
               }
               else
               {
                   foreach (Excel.Range columnE in xlWS.Range["E" + rowNum].Cells)
                   {
                       columnE.Value = "1";
                   }
               }
egdjgwm8

egdjgwm81#

您可以使用switch来简化此代码-请注意,除了分配给columnE.Value的值之外,循环都是相同的,因此您可以预先计算并用途:

const string morphine15ml = "6510005510209015";
const string lorazepam30ml = "57100060001320";
int rowNum = 1;
foreach (Range packageSize in xlWS.Range["C2:C" + xlWSlastRow].Cells)
{
    rowNum++;
    var value = packageSize.Value switch
    {
        morphine15ml => "15",
        lorazepam30ml => "30",
        _ => "1"
    };
    foreach (Excel.Range columnE in xlWS.Range["E" + rowNum].Cells)
    {
        columnE.Value = value;
    }
}

如果使用的语言版本不支持switch expressions,则可以将其重写为switch语句:

string value;
switch (packageSize.Value)
{
    case morphine15ml:
        value = "15";
        break;
    case lorazepam30ml:
        value = "30";
        break;
    default:
        value = "1";
        break;
}

相关问题