123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?php
- class PHPExcel_Writer_Excel5_BIFFwriter
- {
-
- private static $byteOrder;
-
- public $_data;
-
- public $_datasize;
-
- private $limit = 8224;
-
- public function __construct()
- {
- $this->_data = '';
- $this->_datasize = 0;
- }
-
- public static function getByteOrder()
- {
- if (!isset(self::$byteOrder)) {
-
- $teststr = pack("d", 1.2345);
- $number = pack("C8", 0x8D, 0x97, 0x6E, 0x12, 0x83, 0xC0, 0xF3, 0x3F);
- if ($number == $teststr) {
- $byte_order = 0;
- } elseif ($number == strrev($teststr)) {
- $byte_order = 1;
- } else {
-
- throw new PHPExcel_Writer_Exception("Required floating point format not supported on this platform.");
- }
- self::$byteOrder = $byte_order;
- }
- return self::$byteOrder;
- }
-
- protected function append($data)
- {
- if (strlen($data) - 4 > $this->limit) {
- $data = $this->addContinue($data);
- }
- $this->_data .= $data;
- $this->_datasize += strlen($data);
- }
-
- public function writeData($data)
- {
- if (strlen($data) - 4 > $this->limit) {
- $data = $this->addContinue($data);
- }
- $this->_datasize += strlen($data);
- return $data;
- }
-
- protected function storeBof($type)
- {
- $record = 0x0809;
- $length = 0x0010;
-
- $unknown = pack("VV", 0x000100D1, 0x00000406);
- $build = 0x0DBB;
- $year = 0x07CC;
- $version = 0x0600;
- $header = pack("vv", $record, $length);
- $data = pack("vvvv", $version, $type, $build, $year);
- $this->append($header . $data . $unknown);
- }
-
- protected function storeEof()
- {
- $record = 0x000A;
- $length = 0x0000;
- $header = pack("vv", $record, $length);
- $this->append($header);
- }
-
- public function writeEof()
- {
- $record = 0x000A;
- $length = 0x0000;
- $header = pack("vv", $record, $length);
- return $this->writeData($header);
- }
-
- private function addContinue($data)
- {
- $limit = $this->limit;
- $record = 0x003C;
-
-
- $tmp = substr($data, 0, 2) . pack("v", $limit) . substr($data, 4, $limit);
- $header = pack("vv", $record, $limit);
-
- $data_length = strlen($data);
- for ($i = $limit + 4; $i < ($data_length - $limit); $i += $limit) {
- $tmp .= $header;
- $tmp .= substr($data, $i, $limit);
- }
-
- $header = pack("vv", $record, strlen($data) - $i);
- $tmp .= $header;
- $tmp .= substr($data, $i, strlen($data) - $i);
- return $tmp;
- }
- }
|