xf_array = array(); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 1)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 1)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 2)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 2)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); $this->append(array("forced"=>1)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x2b)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x29)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x2c)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x2a)); $this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x09)); $this->defaultxf = $this->append(array("forced"=>1, "flagsforce" => 0x50, "patternbgcolor" => 0x88, "patterncolor" => 0x08, "fillpattern" => 0)); } public function append($params) { $xf = array("fontindex" => 0x00, "formatindex" => 0x00, "parentxfindex" => 0x0, "xftype" => XLSXF_TYPE_PROT_CELLLOCKED, "allign" => XLSXF_VALLIGN_BOTTOM | XLSXF_HALLIGN_GENERAL, "flags" => 0x00, "rotate" => XLSXF_TEXTROTATION_NOROTATION, "patterncolor" => 0x40, "patternbgcolor" => 0xc0, "fillpattern" => 0x00, "bordertop" => XLSXF_BORDER_NOBORDER, "bordertopcolor" => 0x0000, "borderbottom" => XLSXF_BORDER_NOBORDER, "borderbottomcolor" => 0x0000, "borderleft" => XLSXF_BORDER_NOBORDER, "borderleftcolor" => 0x0000, "borderright" => XLSXF_BORDER_NOBORDER, "borderrightcolor" => 0x0000 ); if (is_array($params)) { foreach ($params as $key => $param) { switch ($key) { case "formatindex" : $xf[$key]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRNUM; break; case "fontindex" : $xf[$key]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; break; case "rotate" : $xf[$key]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRALC; break; case "xftype" : $xf[$key]=$xf[$key] | $param; break; case "parentxfindex" : $xf[$key]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRNUM; break; case "patterncolor" : $xf[$key] = $param; // foreground color definied with font break; case "patternbgcolor" : $xf[$key]=$param; $xf["patterncolor"]=0x08; if ($xf["fillpattern"]==0x00) { $xf["fillpattern"]=0x01; } $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRPAT | XLSXF_USEDATTRIB_ATRALC; break; case "fillpattern" : $xf[$key]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRPAT; break; case "hallign" : $i = $xf["allign"]&0xf8; $i = $i | $param; $xf["allign"] = $i; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; break; case "vallign" : $i = $xf["allign"]&0x1f; $i = $i | $param; $xf["allign"] = $i; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; break; case "textwrap" : $xf["allign"]=$xf["allign"] | XLSXF_WRAPTEXT; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; break; case "border" : $xf["bordertop"]=$param; $xf["borderbottom"]=$param; $xf["borderleft"]=$param; $xf["borderright"]=$param; $param=0x0008; // default border color = black case "bordercolor" : $xf["bordertopcolor"]=$param; $xf["borderbottomcolor"]=$param; $xf["borderleftcolor"]=$param; $xf["borderrightcolor"]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRBDR; break; case "bordertop" : case "borderbottom" : case "borderleft" : case "borderright" : $xf[$key]=$param; $colorkey = $key."color"; if ($xf[$colorkey]==0x0000) { $xf[$colorkey]=0x0009; } $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRBDR; break; case "bordertopcolor" : case "borderbottomcolor": case "borderleftcolor": case "borderrightcolor": $xf[$key]=$param; $xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRBDR; break; } } if (count($this->xf_array)==0) { $xf["flags"] = 0; } if ($xf["parentxfindex"]==0xffffff) { $xf["flags"] = $xf["flags"] & 0xf7; } if (isset($params["flagsforce"])) { $xf["flags"] = $params["flagsforce"]; } } $s = serialize($xf); $xfindex = array_search($s,$this->xf_array); if (($xfindex===false) || (isset($params["forced"]))) { $xfindex = count($this->xf_array); $this->xf_array[] = $s; if (defined("XFDEBUG")) { $xfindex = array_search($s,$this->xf_array); echo "new XF record , index : $xfindex\n"; echo "new XF record : $s \n"; } } return $xfindex; } public function save($filehandle,$xls_biffobject) { foreach ($this->xf_array as $xfindex => $tmp) { $xfrec = unserialize($tmp); $xls_biffobject->clear(BIFF_XFRECORD); $xls_biffobject->append(XLSDATA_SHORT,$xfrec["fontindex"]); $xls_biffobject->append(XLSDATA_SHORT,$xfrec["formatindex"]); $i = ($xfrec["parentxfindex"]<<4) | $xfrec["xftype"]; $xls_biffobject->append(XLSDATA_SHORT,$i); $xls_biffobject->append(XLSDATA_BYTE,$xfrec["allign"]); $i = $xfrec["rotate"] | $xfrec["flags"]; $xls_biffobject->append(XLSDATA_BYTE,$i); $i = $xfrec["patternbgcolor"] | ($xfrec["patterncolor"] << 7); $i = (($i == 0) ? 0x20c0 : $i); // magic number if no colors defined $i = $i | ($xfrec["fillpattern"] << 16); $i = $i | ($xfrec["borderbottom"] << 22); $i = $i | ($xfrec["borderbottomcolor"] << 25); $xls_biffobject->append(XLSDATA_LONG,$i); $i = $xfrec["bordertop"] | ($xfrec["borderleft"] << 3) | ($xfrec["borderright"] << 6); $i = $i | ($xfrec["bordertopcolor"] << 9) | ($xfrec["borderleftcolor"] << 16) | ($xfrec["borderrightcolor"] << 23); $xls_biffobject->append(XLSDATA_LONG,$i); $xls_biffobject->save($filehandle); } } } ?>