在action方法中重复运行一段代码

时间:2018-02-21 14:01:29

标签: c# asp.net-core-mvc-2.0

我正在尝试向用户提供一个excel文件,该文件具有一些基本的边框和颜色填充。不是一次又一次地写它们,任何人都可以建议我采用更好的方法。

以下是我想重复多次的示例代码。

ExcelWorkSheet.Cells[row, col].Style.Border.Top.Color.SetColor(Color.Red);
ExcelWorkSheet.Cells[row, col].Style.Border.Top.Style= ExcelBorderStyle.Thin;
ExcelWorkSheet.Cells[row, col].Style.Border.Left.Color.SetColor(Color.Red);
ExcelWorkSheet.Cells[row, col].Style.Border.Left.Style = ExcelBorderStyle.Thin;
ExcelWorkSheet.Cells[row, col].Style.Border.Right.Color.SetColor(Color.Red);
ExcelWorkSheet.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin;
ExcelWorkSheet.Cells[row, col].Style.Border.Bottom.Color.SetColor(Color.Red);
ExcelWorkSheet.Cells[row, col].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

我想在我的动作方法中做多次这样的事情,这需要一组前面的值(行,col,即这是其他一些excel文件)。我也在同一个工作表中写入值。

我不想重复代码。请建议我一个更好的方法。

3 个答案:

答案 0 :(得分:0)

使用函数并为您想要按钮的样式类型传递参数,将excel工作表和您想要编辑的区域传递给

 private void SetValues(int StyleType, var CurrentSheet, int row, int col)
{
    switch (StyleType)
    {
        case 1:
            //add style if its 1 (this could be for important items as you mentioned)
            break;
        case 2:
            //a different style
            break;
        case 3:
            //I'll use your example here to give you more context
            CurrentSheet.Cells[row, col].Style.Border.Top.Color.SetColor(Color.Red);
            CurrentSheet.Cells[row, col].Style.Border.Top.Style = ExcelBorderStyle.Thin;
            CurrentSheet.Cells[row, col].Style.Border.Left.Color.SetColor(Color.Red);
            CurrentSheet.Cells[row, col].Style.Border.Left.Style = ExcelBorderStyle.Thin;
            CurrentSheet.Cells[row, col].Style.Border.Right.Color.SetColor(Color.Red);
            CurrentSheet.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin;
            CurrentSheet.Cells[row, col].Style.Border.Bottom.Color.SetColor(Color.Red);


            CurrentSheet.Cells[row, col].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
            break;
    }
}

然后为您需要设置的每一行/列调用该函数:

for(int i = 0; i<500;i++)
{
    if(important)
    {
        SetValues(1, ExcelWorkSheet, i, 1);
    }
    else if(not_important)
    {
        SetValues(2, ExcelWorkSheet, i, 1);
    }  
}

答案 1 :(得分:0)

您可以创建静态功能,并在需要时随时使用。

static void SetCellStyle(Range cells, Color color, int row,int col)
    {
      cells[row, col].Style.Border.Top.Color.SetColor(color);
      cells[row, col].Style.Border.Top.Style= ExcelBorderStyle.Thin;
      cells[row, col].Style.Border.Left.Color.SetColor(color);
      cells[row, col].Style.Border.Left.Style = ExcelBorderStyle.Thin;
      cells[row, col].Style.Border.Right.Color.SetColor(color);
      cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin;
      cells[row, col].Style.Border.Bottom.Color.SetColor(color); 
      cells[row, col].Style.Border.Bottom.Style= ExcelBorderStyle.Thin;
    }

您可以这样称呼它:

SetCellStyle(ExcelWorkSheet.Cells, Color.red, row,col);

答案 2 :(得分:0)

而不是你的代码使用这样的循环:

    for (int row = FIRSTROW; i <= LASTROW; i++)
        for (int col = FIRSTCOL; j <= LASTCOL; j++)
            SetBorder(row, col);     

用您想要的任何值替换FIRSTROW,LASTROW,FIRSTCOL和LASTCOL。 同时将此功能添加到您的班级:

    private static void SetBorder(int row, int col)
    {
        var border = ExcelWorkSheet.Cells[row, col].Style.Border;

        border.Top.Color.SetColor(Color.Red);
        border.Top.Style = ExcelBorderStyle.Thin;
        border.Left.Color.SetColor(Color.Red);
        border.Left.Style = ExcelBorderStyle.Thin;
        border.Right.Color.SetColor(Color.Red);
        border.Right.Style = ExcelBorderStyle.Thin;
        border.Bottom.Color.SetColor(Color.Red);
        border.Bottom.Style = ExcelBorderStyle.Thin;
    }