Feature: Added some support for cell annotations in the Excel5 Reader... now handles annotation blocks beyond the 2,048 character limit for any individual annotation block.

(for BIFF5-7 only at present... BIFF8 support is still outstanding)

git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@67192 2327b42d-5241-43d6-9e2a-de5ac946f064
This commit is contained in:
Mark Baker 2011-01-21 17:58:35 +00:00
parent 2368c7fbd0
commit 5404406884
1 changed files with 27 additions and 9 deletions

View File

@ -1334,6 +1334,11 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_pos += 4 + $length; $this->_pos += 4 + $length;
} }
/**
* The NOTE record specifies a comment associated with a particular cell. In Excel 95 (BIFF7) and earlier versions,
* this record stores a note (cell note). This feature was significantly enhanced in Excel 97.
*/
private function _readNote() private function _readNote()
{ {
// echo '<b>Read Cell Annotation</b><br />'; // echo '<b>Read Cell Annotation</b><br />';
@ -1351,24 +1356,37 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
if ($this->_version == self::XLS_BIFF8) { if ($this->_version == self::XLS_BIFF8) {
$noteObjID = self::_GetInt2d($recordData, 6); $noteObjID = self::_GetInt2d($recordData, 6);
$noteAuthor = trim(substr($recordData, 8)); $noteAuthor = trim(substr($recordData, 8));
// echo 'Note Address=',$cellAddress,'<br />'; // echo 'Note Address=',$cellAddress,'<br />';
// echo 'Note Object ID=',$noteObjID,'<br />'; // echo 'Note Object ID=',$noteObjID,'<br />';
// echo 'Note Author=',$noteAuthor,'<hr />'; // echo 'Note Author=',$noteAuthor,'<hr />';
} else { } else {
$cellAddress = str_replace('$','',$cellAddress); $extension = false;
// $noteLength = self::_GetInt2d($recordData, 4); if ($cellAddress == '$B$65536') {
$noteText = trim(substr($recordData, 6)); // If the address row is -1 and the column is 0, (which translates as $B$65536) then this is a continuation
// note from the previous cell annotation. We're not yet handling this, so annotations longer than the
// max 2048 bytes will probably throw a wobbly.
$row = self::_GetInt2d($recordData, 0);
$extension = true;
$cellAddress = array_pop(array_keys($this->_phpSheet->getComments()));
}
// echo 'Note Address=',$cellAddress,'<br />'; // echo 'Note Address=',$cellAddress,'<br />';
$cellAddress = str_replace('$','',$cellAddress);
$noteLength = self::_GetInt2d($recordData, 4);
$noteText = trim(substr($recordData, 6));
// echo 'Note Length=',$noteLength,'<br />'; // echo 'Note Length=',$noteLength,'<br />';
// echo 'Note Text=',$noteText,'<br />'; // echo 'Note Text=',$noteText,'<br />';
if ($extension) {
$comment = $this->_phpSheet->getComment( $cellAddress );
$commentText = $comment->getText()->getPlainText();
$comment->setText($this->_parseRichText($commentText.$noteText) );
} else {
$this->_phpSheet->getComment( $cellAddress ) $this->_phpSheet->getComment( $cellAddress )
// ->setAuthor( $author ) // ->setAuthor( $author )
->setText($this->_parseRichText($noteText) ); ->setText($this->_parseRichText($noteText) );
} }
}
} }