From 7803f3018431e1f4030f4930af83f3a281068627 Mon Sep 17 00:00:00 2001 From: LEFEVRE Franck Date: Tue, 6 Apr 2010 09:48:58 +0000 Subject: [PATCH] Fixed issue #12362: named worksheets & utf-8 - patch by cfhay git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@297578 c90b9560-bf6c-de11-be94-00142212c4b1 --- Spreadsheet/Excel/Writer/Workbook.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Spreadsheet/Excel/Writer/Workbook.php b/Spreadsheet/Excel/Writer/Workbook.php index aa6a841..e086fdd 100644 --- a/Spreadsheet/Excel/Writer/Workbook.php +++ b/Spreadsheet/Excel/Writer/Workbook.php @@ -322,6 +322,10 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri if (strlen($name) > 31) { return $this->raiseError("Sheetname $name must be <= 31 chars"); } + } else { + if(function_exists('iconv')) { + $name = iconv('UTF-8','UTF-16LE',$name); + } } // Check that the worksheet name doesn't already exist: a fatal Excel error. @@ -338,7 +342,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri $this->_str_total, $this->_str_unique, $this->_str_table, $this->_url_format, $this->_parser, $this->_tmp_dir); - + $this->_worksheets[$index] = &$worksheet; // Store ref for iterator $this->_sheetnames[$index] = $name; // Store EXTERNSHEET names $this->_parser->setExtSheet($name, $index); // Register worksheet name with parser @@ -773,6 +777,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri * @access private */ function _storeExterns() + { // Create EXTERNCOUNT with number of worksheets $this->_storeExterncount(count($this->_worksheets)); @@ -928,11 +933,15 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri } $grbit = 0x0000; // Visibility and sheet type - $cch = strlen($sheetname); // Length of sheet name + if ($this->_BIFF_version == 0x0600) { + $cch = mb_strlen($sheetname,'UTF-16LE'); // Length of sheet name + } else { + $cch = strlen($sheetname); // Length of sheet name + } $header = pack("vv", $record, $length); if ($this->_BIFF_version == 0x0600) { - $data = pack("Vvv", $offset, $grbit, $cch); + $data = pack("VvCC", $offset, $grbit, $cch, 0x1); } else { $data = pack("VvC", $offset, $grbit, $cch); } @@ -1290,7 +1299,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri $header = pack("vvv", $record, $length, $ccv); $this->_append($header . $data); } - + /** * Calculate * Handling of the SST continue blocks is complicated by the need to include an