read PageViewLayout

This commit is contained in:
karak 2012-11-22 14:49:55 +09:00
parent fd4161dcaa
commit c9610c936f
1 changed files with 39 additions and 0 deletions

View File

@ -156,6 +156,7 @@ class PHPExcel_Reader_Excel5 extends PHPExcel_Reader_Abstract implements PHPExce
const XLS_Type_RANGEPROTECTION = 0x0868;
const XLS_Type_SHEETLAYOUT = 0x0862;
const XLS_Type_XFEXT = 0x087d;
const XLS_Type_PAGELAYOUTVIEW = 0x088b;
const XLS_Type_UNKNOWN = 0xffff;
@ -784,6 +785,7 @@ class PHPExcel_Reader_Excel5 extends PHPExcel_Reader_Abstract implements PHPExce
case self::XLS_Type_MSODRAWING: $this->_readMsoDrawing(); break;
case self::XLS_Type_OBJ: $this->_readObj(); break;
case self::XLS_Type_WINDOW2: $this->_readWindow2(); break;
case self::XLS_Type_PAGELAYOUTVIEW: $this->_readPageLayoutView(); break;
case self::XLS_Type_SCL: $this->_readScl(); break;
case self::XLS_Type_PANE: $this->_readPane(); break;
case self::XLS_Type_SELECTION: $this->_readSelection(); break;
@ -4014,6 +4016,43 @@ class PHPExcel_Reader_Excel5 extends PHPExcel_Reader_Abstract implements PHPExce
}
}
/**
* Read PLV Record(Created by Excel2007 or upper)
*/
private function _readPageLayoutView(){
$length = self::_GetInt2d($this->_data, $this->_pos + 2);
$recordData = substr($this->_data, $this->_pos + 4, $length);
// move stream pointer to next record
$this->_pos += 4 + $length;
//var_dump(unpack("vrt/vgrbitFrt/V2reserved/vwScalePLV/vgrbit", $recordData));
// offset: 0; size: 2; rt
//->ignore
$rt = self::_GetInt2d($recordData, 0);
// offset: 2; size: 2; grbitfr
//->ignore
$grbitFrt = self::_GetInt2d($recordData, 2);
// offset: 4; size: 8; reserved
//->ignore
// offset: 12; size 2; zoom scale
$wScalePLV = self::_GetInt2d($recordData, 12);
// offset: 14; size 2; grbit
$grbit = self::_GetInt2d($recordData, 14);
// decomprise grbit
$fPageLayoutView = $grbit & 0x01;
$fRulerVisible = ($grbit >> 1) & 0x01; //no support
$fWhitespaceHidden = ($grbit >> 3) & 0x01; //no support
if ($fPageLayoutView === 1) {
$this->_phpSheet->getSheetView()->setView(PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_LAYOUT);
$this->_phpSheet->getSheetView()->setZoomScale($wScalePLV); //set by Excel2007 only if SHEETVIEW_PAGE_LAYOUT
}
//otherwise, we cannot know whether SHEETVIEW_PAGE_LAYOUT or SHEETVIEW_PAGE_BREAK_PREVIEW.
}
/**
* Read SCL record