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