/** * Convert a number token to ptgInt or ptgNum * * @access private * @param mixed $num an integer or double for conversion to its ptg value */ function _convertNumber($num) { // Integer in the range 0..2**16-1 if (preg_match("/^\\d+\$/", $num) and $num <= 65535) { return pack("Cv", $this->ptg['ptgInt'], $num); } else { // A float if (PHPExcel_Writer_Excel5_BIFFwriter::getByteOrder()) { // if it's Big Endian $num = strrev($num); } return pack("Cd", $this->ptg['ptgNum'], $num); } }
/** * Constructor * * @param int &$str_total Total number of strings * @param int &$str_unique Total number of unique strings * @param array &$str_table String Table * @param array &$colors Colour Table * @param mixed $parser The formula parser created for the Workbook * @param boolean $preCalculateFormulas Flag indicating whether formulas should be calculated or just written * @param string $phpSheet The worksheet to write * @param PHPExcel_Worksheet $phpSheet */ public function __construct(&$str_total, &$str_unique, &$str_table, &$colors, $parser, $preCalculateFormulas, $phpSheet) { // It needs to call its parent's constructor explicitly parent::__construct(); // change BIFFwriter limit for CONTINUE records // $this->_limit = 8224; $this->_preCalculateFormulas = $preCalculateFormulas; $this->_str_total =& $str_total; $this->_str_unique =& $str_unique; $this->_str_table =& $str_table; $this->_colors =& $colors; $this->_parser = $parser; $this->_phpSheet = $phpSheet; //$this->ext_sheets = array(); //$this->offset = 0; $this->_xls_strmax = 255; $this->_colinfo = array(); $this->_selection = array(0, 0, 0, 0); $this->_active_pane = 3; $this->_print_headers = 0; $this->_outline_style = 0; $this->_outline_below = 1; $this->_outline_right = 1; $this->_outline_on = 1; $this->_fntHashIndex = array(); // calculate values for DIMENSIONS record $minR = 1; $minC = 'A'; $maxR = $this->_phpSheet->getHighestRow(); $maxC = $this->_phpSheet->getHighestColumn(); // Determine lowest and highest column and row // $this->_firstRowIndex = ($minR > 65535) ? 65535 : $minR; $this->_lastRowIndex = $maxR > 65535 ? 65535 : $maxR; $this->_firstColumnIndex = PHPExcel_Cell::columnIndexFromString($minC); $this->_lastColumnIndex = PHPExcel_Cell::columnIndexFromString($maxC); // if ($this->_firstColumnIndex > 255) $this->_firstColumnIndex = 255; if ($this->_lastColumnIndex > 255) { $this->_lastColumnIndex = 255; } $this->_countCellStyleXfs = count($phpSheet->getParent()->getCellStyleXfCollection()); }
/** * Class constructor * * @param PHPExcel $phpExcel The Workbook * @param int &$str_total Total number of strings * @param int &$str_unique Total number of unique strings * @param array &$str_table String Table * @param array &$colors Colour Table * @param mixed $parser The formula parser created for the Workbook */ public function __construct(PHPExcel $phpExcel = null, &$str_total, &$str_unique, &$str_table, &$colors, $parser) { // It needs to call its parent's constructor explicitly parent::__construct(); $this->parser = $parser; $this->biffSize = 0; $this->palette = array(); $this->countryCode = -1; $this->strTotal =& $str_total; $this->strUnique =& $str_unique; $this->strTable =& $str_table; $this->colors =& $colors; $this->setPaletteXl97(); $this->phpExcel = $phpExcel; // set BIFFwriter limit for CONTINUE records // $this->_limit = 8224; $this->codepage = 0x4b0; // Add empty sheets and Build color cache $countSheets = $phpExcel->getSheetCount(); for ($i = 0; $i < $countSheets; ++$i) { $phpSheet = $phpExcel->getSheet($i); $this->parser->setExtSheet($phpSheet->getTitle(), $i); // Register worksheet name with parser $supbook_index = 0x0; $ref = pack('vvv', $supbook_index, $i, $i); $this->parser->references[] = $ref; // Register reference with parser // Sheet tab colors? if ($phpSheet->isTabColorSet()) { $this->addColor($phpSheet->getTabColor()->getRGB()); } } }
/** * Determine the byte order and store it as class data to avoid * recalculating it for each call to new(). * * @return int */ public static function getByteOrder() { if (!isset(self::$_byte_order)) { // Check if "pack" gives the required IEEE 64bit float $teststr = pack("d", 1.2345); $number = pack("C8", 0x8d, 0x97, 0x6e, 0x12, 0x83, 0xc0, 0xf3, 0x3f); if ($number == $teststr) { $byte_order = 0; // Little Endian } elseif ($number == strrev($teststr)) { $byte_order = 1; // Big Endian } else { // Give up. I'll fix this in a later version. throw new Exception("Required floating point format not supported on this platform."); } self::$_byte_order = $byte_order; } return self::$_byte_order; }
/** * Store the BOTTOMMARGIN BIFF record. */ private function _writeMarginBottom() { $record = 0x29; // Record identifier $length = 0x8; // Bytes to follow $margin = $this->_phpSheet->getPageMargins()->getBottom(); // Margin in inches $header = pack("vv", $record, $length); $data = pack("d", $margin); if (PHPExcel_Writer_Excel5_BIFFwriter::getByteOrder()) { // if it's Big Endian $data = strrev($data); } $this->_append($header . $data); }
/** * Store Worksheet data in memory using the parent's class append() or to a * temporary file, the default. * * @access private * @param string $data The binary data to append */ function _append($data) { if ($this->_using_tmpfile) { // Add CONTINUE records if necessary if (strlen($data) > $this->_limit) { $data = $this->_addContinue($data); } fwrite($this->_filehandle, $data); $this->_datasize += strlen($data); } else { parent::_append($data); } }
/** * Class constructor * * @param PHPExcel $phpExcel The Workbook * @param int $BIFF_verions BIFF version * @param int $str_total Total number of strings * @param int $str_unique Total number of unique strings * @param array $str_table * @param mixed $parser The formula parser created for the Workbook */ public function __construct(PHPExcel $phpExcel = null, $BIFF_version = 0x600, &$str_total, &$str_unique, &$str_table, &$colors, $parser) { // It needs to call its parent's constructor explicitly parent::__construct(); $this->_parser = $parser; $this->_biffsize = 0; $this->_palette = array(); $this->_codepage = 0x4e4; // FIXME: should change for BIFF8 $this->_country_code = -1; $this->_str_total =& $str_total; $this->_str_unique =& $str_unique; $this->_str_table =& $str_table; $this->_colors =& $colors; $this->_setPaletteXl97(); $this->_phpExcel = $phpExcel; if ($BIFF_version == 0x600) { $this->_BIFF_version = 0x600; // change BIFFwriter limit for CONTINUE records $this->_limit = 8224; $this->_codepage = 0x4b0; } // Add empty sheets and Build color cache $countSheets = $phpExcel->getSheetCount(); for ($i = 0; $i < $countSheets; ++$i) { $phpSheet = $phpExcel->getSheet($i); $this->_parser->setExtSheet($phpSheet->getTitle(), $i); // Register worksheet name with parser // for BIFF8 if ($this->_BIFF_version == 0x600) { $supbook_index = 0x0; $ref = pack('vvv', $supbook_index, $i, $i); $this->_parser->_references[] = $ref; // Register reference with parser } // Sheet tab colors? if ($phpSheet->isTabColorSet()) { $this->_addColor($phpSheet->getTabColor()->getRGB()); } } }