Skip to main content

Overview

The Borders class manages all borders for a cell or range, while the Border class controls individual border sides (top, bottom, left, right, diagonal).

Namespace

PhpOffice\PhpSpreadsheet\Style\Borders
PhpOffice\PhpSpreadsheet\Style\Border

Getting Borders Objects

// Get Borders object
$borders = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders();

// Get individual border sides
$topBorder = $borders->getTop();
$bottomBorder = $borders->getBottom();
$leftBorder = $borders->getLeft();
$rightBorder = $borders->getRight();
$diagonalBorder = $borders->getDiagonal();

Border Constants

Border Styles

BORDER_NONE
string
default:"'none'"
No border
BORDER_THIN
string
default:"'thin'"
Thin border line
BORDER_MEDIUM
string
default:"'medium'"
Medium border line
BORDER_THICK
string
default:"'thick'"
Thick border line
BORDER_DASHED
string
default:"'dashed'"
Dashed border line
BORDER_DOTTED
string
default:"'dotted'"
Dotted border line
BORDER_DOUBLE
string
default:"'double'"
Double border line
BORDER_HAIR
string
default:"'hair'"
Hair-thin border line
BORDER_DASHDOT
string
default:"'dashDot'"
Dash-dot border line
BORDER_DASHDOTDOT
string
default:"'dashDotDot'"
Dash-dot-dot border line
BORDER_MEDIUMDASHED
string
default:"'mediumDashed'"
Medium dashed border line
BORDER_MEDIUMDASHDOT
string
default:"'mediumDashDot'"
Medium dash-dot border line
BORDER_MEDIUMDASHDOTDOT
string
default:"'mediumDashDotDot'"
Medium dash-dot-dot border line
BORDER_SLANTDASHDOT
string
default:"'slantDashDot'"
Slanted dash-dot border line

Diagonal Directions

DIAGONAL_NONE
int
default:"0"
No diagonal
DIAGONAL_UP
int
default:"1"
Diagonal line going up (bottom-left to top-right)
DIAGONAL_DOWN
int
default:"2"
Diagonal line going down (top-left to bottom-right)
DIAGONAL_BOTH
int
default:"3"
Both diagonal lines (X pattern)

Borders Class Methods

getTop()

Get the top border.
public function getTop(): Border

getBottom()

Get the bottom border.
public function getBottom(): Border

getLeft()

Get the left border.
public function getLeft(): Border

getRight()

Get the right border.
public function getRight(): Border

getDiagonal()

Get the diagonal border.
public function getDiagonal(): Border

Pseudo-Border Methods

These special methods only work when applied to ranges:

getAllBorders()

Get a pseudo-border that applies to all borders (outline and inside).
public function getAllBorders(): Border

getOutline()

Get a pseudo-border that applies to outline borders only (top, right, bottom, left).
public function getOutline(): Border

getInside()

Get a pseudo-border that applies to inside borders only.
public function getInside(): Border

getVertical()

Get a pseudo-border that applies to vertical inside borders.
public function getVertical(): Border

getHorizontal()

Get a pseudo-border that applies to horizontal inside borders.
public function getHorizontal(): Border

getDiagonalDirection()

Get the diagonal direction.
public function getDiagonalDirection(): int

setDiagonalDirection()

Set the diagonal direction.
public function setDiagonalDirection(int $direction): static
direction
int
required
Diagonal direction (use DIAGONAL_* constants)

applyFromArray()

Apply multiple border settings at once.
public function applyFromArray(array $styleArray): static
styleArray
array
required
Array containing border style information

Border Class Methods

getBorderStyle()

Get the border style.
public function getBorderStyle(): string

setBorderStyle()

Set the border style.
public function setBorderStyle(bool|string $style): static
style
bool|string
required
Border style (use BORDER_* constants). true = BORDER_MEDIUM, false = BORDER_NONE

getColor()

Get the border color.
public function getColor(): Color

setColor()

Set the border color.
public function setColor(Color $color): static
color
Color
required
Color object

applyFromArray()

Apply border settings.
public function applyFromArray(array $styleArray): static
styleArray
array
required
Array with ‘borderStyle’ and/or ‘color’ keys

Complete Examples

Basic Border Styling

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Border;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// Method 1: Individual borders
$borders = $sheet->getStyle('A1')->getBorders();
$borders->getTop()->setBorderStyle(Border::BORDER_THIN);
$borders->getBottom()->setBorderStyle(Border::BORDER_THICK);
$borders->getLeft()->setBorderStyle(Border::BORDER_MEDIUM);
$borders->getRight()->setBorderStyle(Border::BORDER_DOUBLE);

// Method 2: Using applyFromArray
$sheet->getStyle('B2')->getBorders()->applyFromArray([
    'top' => [
        'borderStyle' => Border::BORDER_THIN,
        'color' => ['rgb' => '000000']
    ],
    'bottom' => [
        'borderStyle' => Border::BORDER_THIN,
        'color' => ['rgb' => '000000']
    ]
]);

All Borders for a Range

// Apply border to all sides of a range
$sheet->getStyle('A1:E10')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_THIN)
    ->getColor()->setRGB('000000');

// Or using applyFromArray
$sheet->getStyle('A1:E10')->applyFromArray([
    'borders' => [
        'allBorders' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

Outline Only

// Apply border to outline only (not inside)
$sheet->getStyle('A1:E10')->getBorders()->getOutline()
    ->setBorderStyle(Border::BORDER_THICK)
    ->getColor()->setRGB('000000');

// Or using applyFromArray
$sheet->getStyle('A1:E10')->applyFromArray([
    'borders' => [
        'outline' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

Inside Borders Only

// Apply border to inside cells only
$sheet->getStyle('A1:E10')->applyFromArray([
    'borders' => [
        'inside' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => 'CCCCCC']
        ]
    ]
]);

Vertical and Horizontal Inside Borders

$sheet->getStyle('A1:E10')->applyFromArray([
    'borders' => [
        'vertical' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => '0000FF']
        ],
        'horizontal' => [
            'borderStyle' => Border::BORDER_DASHED,
            'color' => ['rgb' => 'FF0000']
        ]
    ]
]);

Diagonal Borders

// Diagonal down (top-left to bottom-right)
$borders = $sheet->getStyle('A1')->getBorders();
$borders->setDiagonalDirection(Borders::DIAGONAL_DOWN);
$borders->getDiagonal()
    ->setBorderStyle(Border::BORDER_THIN)
    ->getColor()->setRGB('FF0000');

// Diagonal up (bottom-left to top-right)
$sheet->getStyle('B2')->getBorders()->applyFromArray([
    'diagonal' => [
        'borderStyle' => Border::BORDER_THIN,
        'color' => ['rgb' => '0000FF']
    ],
    'diagonalDirection' => Borders::DIAGONAL_UP
]);

// Both diagonals (X pattern)
$sheet->getStyle('C3')->getBorders()->applyFromArray([
    'diagonal' => [
        'borderStyle' => Border::BORDER_MEDIUM,
        'color' => ['rgb' => '00FF00']
    ],
    'diagonalDirection' => Borders::DIAGONAL_BOTH
]);

Table with Borders

// Table outline
$sheet->getStyle('A1:E10')->applyFromArray([
    'borders' => [
        'outline' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['rgb' => '000000']
        ],
        'inside' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => 'CCCCCC']
        ]
    ]
]);

// Header row with bottom border
$sheet->getStyle('A1:E1')->applyFromArray([
    'borders' => [
        'bottom' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

Different Border Styles

// Thin border
$sheet->getStyle('A1')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_THIN);

// Dashed border
$sheet->getStyle('A2')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_DASHED);

// Dotted border
$sheet->getStyle('A3')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_DOTTED);

// Double border
$sheet->getStyle('A4')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_DOUBLE);

// Thick border
$sheet->getStyle('A5')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_THICK);

Colored Borders

// Red border
$sheet->getStyle('A1')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_THIN)
    ->getColor()->setRGB('FF0000');

// Blue border
$sheet->getStyle('A2')->getBorders()->applyFromArray([
    'allBorders' => [
        'borderStyle' => Border::BORDER_MEDIUM,
        'color' => ['rgb' => '0000FF']
    ]
]);

Complex Border Pattern

// Thick outside, thin inside
$sheet->getStyle('A1:D8')->applyFromArray([
    'borders' => [
        'outline' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['rgb' => '000000']
        ],
        'inside' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => 'CCCCCC']
        ]
    ]
]);

// Header with special bottom border
$sheet->getStyle('A1:D1')->applyFromArray([
    'borders' => [
        'bottom' => [
            'borderStyle' => Border::BORDER_DOUBLE,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

Remove Borders

// Remove all borders
$sheet->getStyle('A1:E10')->getBorders()->getAllBorders()
    ->setBorderStyle(Border::BORDER_NONE);

// Remove specific border
$sheet->getStyle('A1')->getBorders()->getTop()
    ->setBorderStyle(Border::BORDER_NONE);

Common Use Cases

Grid Layout

$sheet->getStyle('A1:J20')->applyFromArray([
    'borders' => [
        'allBorders' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

Table Header

$sheet->getStyle('A1:E1')->applyFromArray([
    'borders' => [
        'bottom' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

Boxed Section

$sheet->getStyle('B2:D5')->applyFromArray([
    'borders' => [
        'outline' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

See Also

Build docs developers (and LLMs) love