Как можно установить границу вокруг нескольких ячеек в Excel, используя C#

Я работаю над проектом, который создает файлы Excel.

У меня проблемы с размещением границы для нескольких ячеек для организации файла Excel.

Допустим, я хочу границу от ячейки B5 до B10. Не должно быть границ между B5, B6, B7,...

В настоящее время у меня есть этот код:

workSheet_range = worksheet.get_Range("B5", "B10");
workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();

Он создает границы, однако он помещает границу вокруг каждой ячейки вместо одной большой границы для всех ячеек.

Как я могу сделать это?

8 ответов

Решение

Вы должны индивидуально установить эти

.Borders[Excel.XlBordersIndex.xlEdgeBottom] 
.Borders[Excel.XlBordersIndex.xlEdgeRight]
.Borders[Excel.XlBordersIndex.xlEdgeLeft]  
.Borders[Excel.XlBordersIndex.xlEdgeTop]

Может быть, это может помочь:

workSheet_range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThick);

Я сделал это без ущерба для производительности. Я беру простой Excel для форматирования:

До

Мне удалось сохранить диапазон как A1:C4 в переменной динамически в exRange и использовал приведенный ниже код, чтобы дать границу

((Range)excelSheet.get_Range(exRange)).Cells.Borders.LineStyle = XlLineStyle.xlContinuous;


После

Это код, который устанавливает границы вокруг каждой ячейки:

xlWS.get_Range("C9", "N9").Cells.Borders.Weight = XL.XlBorderWeight.xlMedium;
// ** - You Should do it in all Cells 

//BorderAround: Medium**

worksheet.get_Range("b5", "b5").Cells.BorderAround(Missing.Value, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, ColorTranslator.ToOle(Color.FromArgb(255, 192, 0)));

worksheet.get_Range("b6", "b6").Cells.BorderAround(Missing.Value, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, ColorTranslator.ToOle(Color.FromArgb(255, 192, 0)));

worksheet.get_Range("b10", "b10").Cells.BorderAround(Missing.Value, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, ColorTranslator.ToOle(Color.FromArgb(255, 192, 0)));        

Вот мое решение, используйте просто функцию UsedRange()

Excel.Range tRange = oSheet.UsedRange;
            tRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
            tRange.Borders.Weight = Excel.XlBorderWeight.xlThin;        
ws.UsedRange.BorderAround(
                        Xl.XlLineStyle.xlDash,
                        Xl.XlBorderWeight.xlThick,
                        Xl.XlColorIndex.xlColorIndexAutomatic,
                        ColorTranslator.ToOle(Color.Blue));

Этот код помещает границу вокруг области от (row1,col1) до (row2,col2). Отдельные ячейки не получают границы. Переменная color является целочисленным индексом цвета. См. http://www.databison.com/excel-color-palette-and-color-index-change-using-vba/ для списка номеров индексов и их соответствующих цветов.

    Range cell1 = worksheet.Cells[row1,col1];
    Range cell2 = worksheet.Cells[row2,col2];
    Range range = worksheet.get_Range(cell1,cell2);
    range.BorderAround(
        Type.Missing, XlBorderWeight.xlThick, (XlColorIndex)color, Type.Missing );
Другие вопросы по тегам