Skip to content

Commit e0feeca

Browse files
authored
Fix for #1612 - SLK Long File Name (#1706)
Issue has been marked stale, but ... Sylk read sets worksheet title to filename (minus .slk). If that is >31 characters, PhpSpreadsheet throws Exception. This change truncates sheet title, as Excel does, to 31 characters.
1 parent d90d050 commit e0feeca

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/PhpSpreadsheet/Reader/Slk.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
1010
use PhpOffice\PhpSpreadsheet\Spreadsheet;
1111
use PhpOffice\PhpSpreadsheet\Style\Border;
12+
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
1213

1314
class Slk extends BaseReader
1415
{
@@ -516,7 +517,7 @@ public function loadIntoExisting($pFilename, Spreadsheet $spreadsheet)
516517
$spreadsheet->createSheet();
517518
}
518519
$spreadsheet->setActiveSheetIndex($this->sheetIndex);
519-
$spreadsheet->getActiveSheet()->setTitle(basename($pFilename, '.slk'));
520+
$spreadsheet->getActiveSheet()->setTitle(substr(basename($pFilename, '.slk'), 0, Worksheet::SHEET_TITLE_MAXIMUM_LENGTH));
520521

521522
// Loop through file
522523
$column = $row = '';

tests/PhpSpreadsheetTests/Reader/SlkTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
66
use PhpOffice\PhpSpreadsheet\Reader\Slk;
7+
use PhpOffice\PhpSpreadsheet\Shared\File;
78
use PhpOffice\PhpSpreadsheet\Style\Border;
89
use PhpOffice\PhpSpreadsheet\Style\Fill;
910
use PhpOffice\PhpSpreadsheet\Style\Font;
@@ -12,6 +13,16 @@ class SlkTest extends \PHPUnit\Framework\TestCase
1213
{
1314
private static $testbook = __DIR__ . '/../../../samples/templates/SylkTest.slk';
1415

16+
private $filename = '';
17+
18+
protected function teardown(): void
19+
{
20+
if ($this->filename) {
21+
unlink($this->filename);
22+
$this->filename = '';
23+
}
24+
}
25+
1526
public function testInfo(): void
1627
{
1728
$reader = new Slk();
@@ -131,4 +142,17 @@ public function testSheetIndex(): void
131142

132143
self::assertEquals('FFFF0000', $sheet->getCell('A1')->getStyle()->getFont()->getColor()->getARGB());
133144
}
145+
146+
public function testLongName(): void
147+
{
148+
$contents = file_get_contents(self::$testbook);
149+
$this->filename = File::sysGetTempDir()
150+
. '/123456789a123456789b123456789c12345.slk';
151+
file_put_contents($this->filename, $contents);
152+
$reader = new Slk();
153+
$spreadsheet = $reader->load($this->filename);
154+
$sheet = $spreadsheet->getActiveSheet();
155+
self::assertEquals('123456789a123456789b123456789c1', $sheet->getTitle());
156+
self::assertEquals('FFFF0000', $sheet->getCell('A1')->getStyle()->getFont()->getColor()->getARGB());
157+
}
134158
}

0 commit comments

Comments
 (0)