Запустить фрагмент кода, повторенный внутри метода действия

Я пытаюсь передать пользователю файл 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;

Я хочу сделать что-то подобное несколько раз в моем методе действия, который нуждается в предыдущем наборе значений (строка, столбец, т.е. это какой-то другой файл Excel). Также я записываю значения в один лист.

Я не хочу повторять код. Пожалуйста, предложите мне лучший подход.

3 ответа

Используйте функцию и передайте аргументы для типа стиля, который вам нужен, кнопки, передайте ей лист 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);
    }  
}

Вы можете создать статическую функцию и использовать ее в любое время.

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);

Вместо вашего кода используйте такой цикл:

    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;
    }
Другие вопросы по тегам