Browse Source

Umzug zu gitlab

dev-contao3
Carsten Goetzinger 5 years ago
commit
425d7e44fa
  1. 3
      README.md
  2. 38
      composer.json
  3. 7
      config/autoload.ini
  4. 28
      config/autoload.php
  5. 322
      vendor/biff.php
  6. 53
      vendor/fat.php
  7. 117
      vendor/font.php
  8. 34
      vendor/mergedcells.php
  9. 294
      vendor/palette.php
  10. 230
      vendor/picture.php
  11. 238
      vendor/xf.php
  12. 1414
      vendor/xls_export.php

3
README.md

@ -0,0 +1,3 @@
# xls_export #
Fork der Erweiterung xls_export aus dem Contao Extension Repository (https://contao.org/de/extension-list/view/xls_export.de.html). Der Fork wurde erzeugt, um die Erweiterung im Composer veröffentlichen zu können.

38
composer.json

@ -0,0 +1,38 @@
{
"name":"cgo-it/xls_export",
"description":"xls_export extension for the Contao Open Source CMS",
"keywords":["contao", "excel"],
"type":"contao-module",
"license":"GPL",
"authors":[
{
"name":"cgo IT",
"email":"info@cgo-it.de",
"homepage":"https://cgo-it.de",
"role":"Developer"
}
],
"support": {
"email": "info@cgo-it.de",
"issues": "https://bitbucket.org/cgo-it/contao-xls_export/issues?status=new&status=open",
"source": "https://bitbucket.org/cgo-it/contao-xls_export/src"
},
"require":{
"php":">=5.3",
"contao/core":">=3.0",
"contao-community-alliance/composer-plugin": "~2.0"
},
"replace": {
"cgo-it/xls_export": "self.version"
},
"conflict": {
"contao/core": "2.11.*"
},
"extra":{
"contao": {
"sources":{
"":"system/modules/xls_export"
}
}
}
}

7
config/autoload.ini

@ -0,0 +1,7 @@
;;
; Configure what you want the autoload creator to register
;;
register_namespaces = true
register_classes = true
register_templates = true

28
config/autoload.php

@ -0,0 +1,28 @@
<?php
/**
* Contao Open Source CMS
*
* Copyright (C) 2005-2012 Leo Feyer
*
* @package xls_export
* @link http://contao.org
* @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL
*/
/**
* Register the classes
*/
ClassLoader::addClasses(array
(
// Classes
'xls_bof' => 'system/modules/xls_export/vendor/biff.php',
'fat_class' => 'system/modules/xls_export/vendor/fat.php',
'xls_font' => 'system/modules/xls_export/vendor/font.php',
'xls_mergedcells' => 'system/modules/xls_export/vendor/mergedcells.php',
'xls_palette' => 'system/modules/xls_export/vendor/palette.php',
'xls_picture' => 'system/modules/xls_export/vendor/picture.php',
'xls_xf' => 'system/modules/xls_export/vendor/xf.php',
'xlsexport' => 'system/modules/xls_export/vendor/xls_export.php',
));

322
vendor/biff.php

@ -0,0 +1,322 @@
<?php
define ("XLSDATA_BYTE", 1,true);
define ("XLSDATA_SHORT", 2,true);
define ("XLSDATA_LONG", 3,true);
define ("XLSDATA_FLOAT", 4,true);
define ("XLSDATA_STRING", 5,true);
define ("XLSDATA_LSTRING", 6,true);
define ("XLSDATA_STRING1", 7,true);
define ("XLSDATA_DATA32BIT",8,true);
define ("XLS_BIFF5",0x0809);
define ("XLS_BIFF_EOF",0x000a);
define ("WORKBOOK_SHEET",0x0010);
define ("BIFF_WORKBOOKGLOBALS",0x0005);
define ("BIFF_CALCCOUNT",0x000c);
define ("BIFF_CALCMODE",0x000d);
define ("BIFF_PRECISION",0x000e);
define ("BIFF_REFMODE",0x000f);
define ("BIFF_DELTA",0x0010);
define ("BIFF_ITERATION",0x0011);
define ("BIFF_PROTECT",0x0012);
define ("BIFF_PASSWORD",0x0013);
define ("BIFF_PAGEHEADER",0x0014);
define ("BIFF_PAGEFOOTER",0x0015);
define ("BIFF_EXTERNALREFERENCESCOUNT",0x0016);
define ("BIFF_EXTERNSHEET",0x0017);
define ("BIFF_DEFINEDNAME",0x0018);
define ("BIFF_WINDOWPROTECT",0x0019);
define ("BIFF_SELECTION",0x001d);
define ("BIFF_DATEMODE",0x0022);
define ("BIFF_LEFTMARGIN",0x0026);
define ("BIFF_RIGHTMARGIN",0x0027);
define ("BIFF_TOPMARGIN",0x0028);
define ("BIFF_BOTTOMMARGIN",0x0029);
define ("BIFF_PRINTHEADERS",0x002a);
define ("BIFF_PRINTGRIDLINES",0x002b);
define ("BIFF_FONT",0x0031);
define ("BIFF_CONTINUE",0x003c);
define ("BIFF_WINDOW1",0x003d);
define ("BIFF_BACKUP",0x0040);
define ("BIFF_DEFCOLWIDTH",0x0055);
define ("BIFF_WRITEACCESS",0x005c);
define ("BIFF_OBJECT",0x005d);
define ("BIFF_SAVERECALC",0x005f);
define ("BIFF_COLINFO",0x007d);
define ("BIFF_IMAGEDATA",0x007f);
define ("BIFF_GUTS",0x0080);
define ("BIFF_SHEETPR",0x0081);
define ("BIFF_GRIDSET",0x0082);
define ("BIFF_HCENTER",0x0083);
define ("BIFF_VCENTER",0x0084);
define ("BIFF_BOUNDSHEET",0x0085);
define ("BIFF_COUNTRY",0x008c);
define ("BIFF_OBJECTDISPLAYOPTIONS",0x008d);
define ("BIFF_PALETTE",0x0092);
define ("BIFF_FUNCTIONGROUPCOUNT",0x009c);
define ("BIFF_PAGESETUP",0x00a1);
define ("BIFF_TOOLBARHEADER",0x00bf); // undocumented
define ("BIFF_TOOLBAREND",0x00c0); // undocumented
define ("BIFF_MENURECORDGROUP",0x00c1);
define ("BIFF_DBCELL",0x00d7);
define ("BIFF_BOOKBOOL",0x00da);
define ("BIFF_XFRECORD",0x00e0);
define ("BIFF_INTERFACEHEADER",0x00e1);
define ("BIFF_INTERFACEEND",0x00e2);
define ("BIFF_MERGEDCELLS",0x00e5);
/*
016FH = 367 = ASCII
01B5H = 437 = IBM PC CP-437 (US)
02D0H = 720 = IBM PC CP-720 (OEM Arabic)
02E1H = 737 = IBM PC CP-737 (Greek)
0307H = 775 = IBM PC CP-775 (Baltic)
0352H = 850 = IBM PC CP-850 (Latin I)
0354H = 852 = IBM PC CP-852 (Latin II (Central European))
0357H = 855 = IBM PC CP-855 (Cyrillic)
0359H = 857 = IBM PC CP-857 (Turkish)
035AH = 858 = IBM PC CP-858 (Multilingual Latin I with Euro)
035CH = 860 = IBM PC CP-860 (Portuguese)
035DH = 861 = IBM PC CP-861 (Icelandic)
035EH = 862 = IBM PC CP-862 (Hebrew)
035FH = 863 = IBM PC CP-863 (Canadian (French))
0360H = 864 = IBM PC CP-864 (Arabic)
0361H = 865 = IBM PC CP-865 (Nordic)
0362H = 866 = IBM PC CP-866 (Cyrillic (Russian))
0365H = 869 = IBM PC CP-869 (Greek (Modern))
036AH = 874 = Windows CP-874 (Thai)
03A4H = 932 = Windows CP-932 (Japanese Shift-JIS)
03A8H = 936 = Windows CP-936 (Chinese Simplified GBK)
03B5H = 949 = Windows CP-949 (Korean (Wansung))
03B6H = 950 = Windows CP-950 (Chinese Traditional BIG5)
04B0H = 1200 = UTF-16 (BIFF8)
04E2H = 1250 = Windows CP-1250 (Latin II) (Central European)
04E3H = 1251 = Windows CP-1251 (Cyrillic)
04E4H = 1252 = Windows CP-1252 (Latin I) (BIFF4-BIFF5)
04E5H = 1253 = Windows CP-1253 (Greek)
04E6H = 1254 = Windows CP-1254 (Turkish)
04E7H = 1255 = Windows CP-1255 (Hebrew)
04E8H = 1256 = Windows CP-1256 (Arabic)
04E9H = 1257 = Windows CP-1257 (Baltic)
04EAH = 1258 = Windows CP-1258 (Vietnamese)
0551H = 1361 = Windows CP-1361 (Korean (Johab))
2710H = 10000 = Apple Roman
8000H = 32768 = Apple Roman
8001H = 32769 = Windows CP-1252 (Latin I) (BIFF2-BIFF3)
*/
define ("BIFF_CODEPAGE",0x0042);
define ("BIFF_REFRESHALL",0x01b7);
define ("BIFF_DIMENSIONS",0x0200);
define ("BIFF_NUMBER",0x0203);
define ("BIFF_LABEL",0x0204);
define ("BIFF_ROW",0x0208);
define ("BIFF_INDEX",0x020b);
define ("BIFF_DEFAULTROWHEIGHT",0x0225);
define ("BIFF_WINDOW2",0x023e);
define ("BIFF_STYLEINFORMATION",0x0293);
define ("BIFF_FORMAT",0x041e);
define ("BIFF_SHEETPROTECTION",0x0867);
class xls_bof {
var $data = null;
var $size = 0;
var $type = null;
public function __construct($aboftype=-1) {
if ($aboftype==-1) { die("Error"); }
$this->data = array();
$this->type = $aboftype;
}
public function append($adatatype, $adatarec) {
$new = array();
$new["type"] = $adatatype;
$new["data"] = $adatarec;
$this->data[] = $new;
}
public function clear($aboftype=-1) {
if ($aboftype==-1) { die("Error"); }
$this->type = $aboftype;
$this->data = array();
return true;
}
public function fetch() {
$output = "";
foreach ($this->data as $key => $datarec) {
switch ($datarec["type"]) {
case XLSDATA_BYTE : $output .= pack("C",$datarec["data"]);
$this->size+=1;
break;
case XLSDATA_SHORT: $output .= pack("v",$datarec["data"]);
$this->size+=2;
break;
case XLSDATA_LONG : $output .= pack("V",$datarec["data"]);
$this->size+=4;
break;
case XLSDATA_FLOAT: $output .= pack("d",$datarec["data"]);
$this->size+=8;
break;
case XLSDATA_DATA32BIT :
$ldata = $datarec["data"];
$b3 = $ldata & 0xff;
$b2 = ($ldata >> 8) & 0xff;
$b1 = ($ldata >> 16) & 0xff;
$b0 = ($ldata >> 24) & 0xff;
$output .= pack("CCCC",$b0,$b1,$b2,$b3);
$this->size+=4;
break;
case XLSDATA_STRING:
$output .= pack("C",strlen($datarec["data"]));
$this->size++;
if (strlen($datarec["data"])==0) {
$output .= pack("C",0x00);
$this->size++;
break;
}
case XLSDATA_STRING1:
$this->size+=strlen($datarec["data"]);
//$output .= pack("C",$datarec["data"]);
$output .= $datarec["data"];
break;
case XLSDATA_LSTRING:
$output .= pack("v",strlen($datarec["data"]));
$this->size++;
$this->size++;
$this->size+=strlen($datarec["data"]);
//$output .= pack("C",$datarec["data"]);
$output .= $datarec["data"];
break;
}
}
return pack("vv",$this->bof,$this->size).$output;
}
public function save($afilehd) {
$this->bof = $this->type;
$this->size = 0;
$tmp = $this->fetch();
if ($this->size<2080) {
fwrite($afilehd,$tmp);
}
else {
if (defined("BIFFDEBUG")) {
echo "long record - size : ".$this->size."<br>";
}
$wcount = $this->size;
$tmptype = $this->type;
$tmp = substr($tmp,4);
$tmparr = str_split($tmp,2076);
if (defined("BIFFDEBUG")) {
echo "create parts : ".count($tmparr)."<br>";
}
$tmpout = "";
foreach ($tmparr as $key => $datapart) {
if (defined("BIFFDEBUG")) {
echo "part ($key) size : ".strlen($datapart)."<br>";
}
$tmpout = pack("vv",$tmptype,strlen($datapart)).$datapart;
fwrite($afilehd,$tmpout);
$tmptype = BIFF_CONTINUE;
}
unset($tmparr);
}
return true;
}
public function workbookxfrecords($afilehd) {
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0x00,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0002,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0002,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0x0001,0x00,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x002b,0xfff5,0xf8,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x0029,0xfff5,0xf8,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x002c,0xfff5,0xf8,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x002a,0xfff5,0xf8,0x000020c0);
$this->workbookonexfdata($afilehd,0x0001,0x0009,0xfff5,0xf8,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0x0001,0x10,0x000020c0);
$this->workbookonexfdata($afilehd,0x0000,0x0000,0x0001,0x50,0x00000488);
}
public function workbookonexfdata($afilehd, $fontindex, $formatindex, $xftype, $textorientation, $colorindexs) {
$this->clear(BIFF_XFRECORD);
$this->append(XLSDATA_SHORT,$fontindex);
$this->append(XLSDATA_SHORT,$formatindex);
$this->append(XLSDATA_SHORT,$xftype);
$this->append(XLSDATA_BYTE,0x20); /* alignment
bits mask
2-0 07H XF_HOR_ALIGN ? Horizontal alignment
0 General
1 Left
2 Centred
3 Right
4 Filled
5 Justified (BIFF4-BIFF8)
6 Centred across selection (BIFF4-BIFF8)
7 Distributed (BIFF8, available in Excel 10.0 (Excel XP) and later only)
3 08H 1 = Text is wrapped at right border
6-4 70H XF_VERT_ALIGN ? Vertical alignment
0 Top
1 Centred
2 Bottom
3 Justified (BIFF5-BIFF8)
4 Distributed (BIFF8, available in Excel 10.0 (Excel XP) and later only)
*/
$this->append(XLSDATA_BYTE,$textorientation); /*
bits mask
1-0 03H XF_ORIENTATION ? Text orientation
0 Not rotated
1 Letters are stacked top-to-bottom, but not rotated
2 Text is rotated 90 degrees counterclockwise
3 Text is rotated 90 degrees clockwise
7-2 FCH XF_USED_ATTRIB ? Used attributes
0 01H Flag for number format
1 02H Flag for font
2 04H Flag for horizontal and vertical alignment, text wrap, indentation, orientation, rotation, and text direction
3 08H Flag for border lines
4 10H Flag for background area style
5 20H Flag for cell protection (cell locked and formula hidden)
*/
$this->append(XLSDATA_LONG,$colorindexs); /* Cell border lines and background area:
Bit Mask Contents
6-0 0000007FH Colour index for pattern colour
13-7 00003F80H Colour index for pattern background
21-16 003F0000H Fill pattern
24-22 01C00000H Bottom line style
31-25 FE000000H Colour index for bottom line colour
*/
$this->append(XLSDATA_LONG,0); /* Line styles
Bit Mask Contents
2-0 00000007H Top line style
5-3 00000038H Left line style
8-6 000001C0H Right line style
15-9 0000FE00H Colour index for top line colour
22-16 007F0000H Colour index for left line colour
29-23 3F800000H Colour index for right line colour
*/
$this->save($afilehd);
}
}
?>

53
vendor/fat.php

@ -0,0 +1,53 @@
<?php
class fat_class {
var $streamsize = null;
var $rootstorageoffset = null;
var $fatchain = array();
var $fatsectorcount = null;
public function __construct($afilehd, $astreamsize, $arootstorageoffset) {
$this->streamsize = $astreamsize;
$this->rootstorageoffset = $arootstorageoffset;
if ($this->streamsize>=0x1000) {
$streamsectors = $this->streamsize >> 9;
$streamsectors += (($this->streamsize & 0x1ff)>0 ? 1 : 0);
}
else {
$streamsectors = ($this->rootstorageoffset+0x100) >> 9;
$streamsectors += ((($this->rootstorageoffset+0x100) & 0x1ff)>0 ? 1 : 0);
$streamsectors--;
}
while ($streamsectors>1) {
$this->fatchain[] = count($this->fatchain)+1; // allocate next sector;
$streamsectors--;
}
$this->fatchain[] = 0xfffffffe; // last sector of stream
if ($this->streamsize>=0x1000) {
$this->fatchain[] = 0xfffffffe; // rootstorage , used one sector
}
$this->fatchain[] = 0xfffffffe; // minifat , used one sector
$this->fatchain[] = 0xfffffffe; // directory , used one sector
$fatsize1 = (count($this->fatchain) >> 7) + (((count($this->fatchain) & 0x7f)>0) ? 1 : 0);
$fatsize0 = $fatsize1;
while ($fatsize1) {
$this->fatchain[] = 0xfffffffd; // fat , used nn sector
$fatsize1--;
}
$this->fatsectorcount = (count($this->fatchain) >> 7)+(((count($this->fatchain) & 0x7f)>0) ? 1 : 0);
if ($this->fatsectorcount!=$fatsize0) { $this->fatchain[] = 0xfffffffd; }
$reqbytes = 128-(count($this->fatchain) & 0x7f);
$fatfill = array_fill(count($this->fatchain),$reqbytes,0xffffffff);
$this->fatchain = array_merge($this->fatchain,$fatfill);
$output = "";
$count = 0;
foreach ($this->fatchain as $key => $sectorid) {
$output .= pack("V",$sectorid);
$count += 4;
}
fwrite($afilehd,$output,$count);
}
}
?>

117
vendor/font.php

@ -0,0 +1,117 @@
<?php
define ("XLSFONT_NORMAL",0x0190);
define ("XLSFONT_BOLD",0x02bc);
define ("XLSFONT_ESCAPE_NONE",0x0000);
define ("XLSFONT_ESCAPE_SUPERSCRIPT",0x0001);
define ("XLSFONT_ESCAPE_SUBSCRIPT",0x0002);
define ("XLSFONT_UNDERLINE_NONE",0x00);
define ("XLSFONT_UNDERLINE_SINGLE",0x01);
define ("XLSFONT_UNDERLINE_DOUBLE",0x02);
define ("XLSFONT_UNDERLINE_SINGLEACC",0x21);
define ("XLSFONT_UNDERLINE_DOUBLEACC",0x22);
define ("XLSFONT_FAMILY_NORMAL",0x00);
define ("XLSFONT_FAMILY_ROMAN",0x01);
define ("XLSFONT_FAMILY_SWISS",0x02);
define ("XLSFONT_FAMILY_MODERN",0x03);
define ("XLSFONT_FAMILY_SCRIPT",0x04);
define ("XLSFONT_FAMILY_DECORATIVE",0x05);
define ("XLSFONT_STYLE_ITALIC",0x0002);
define ("XLSFONT_STYLE_STRIKEOUT",0x0008);
define ("XLSFONT_STYLE_OUTLINED",0x0010);
define ("XLSFONT_STYLE_SHADOWED",0x0020);
define ("XLSFONT_STYLE_CONDENSED",0x0040);
define ("XLSFONT_CHARACTERSET_LATIN",0x00);
define ("XLSFONT_CHARACTERSET_SYSTEMDEFAULT",0x01);
define ("XLSFONT_CHARACTERSET_SYMBOL",0x02);
define ("XLSFONT_CHARACTERSET_ROMAN",0x4d);
define ("XLSFONT_CHARACTERSET_JAPANESE",0x80);
define ("XLSFONT_CHARACTERSET_KOREAN_HANGUL",0x81);
define ("XLSFONT_CHARACTERSET_KOREAN_JOHAB",0x82);
define ("XLSFONT_CHARACTERSET_CHINESE_SIMPLIFIED",0x86);
define ("XLSFONT_CHARACTERSET_CHINESE_TRADITIONAL",0x88);
define ("XLSFONT_CHARACTERSET_GREEK",0xa1);
define ("XLSFONT_CHARACTERSET_TURKISH",0xa2);
define ("XLSFONT_CHARACTERSET_VIETNAMESE",0xa3);
define ("XLSFONT_CHARACTERSET_HEBREW",0xb1);
define ("XLSFONT_CHARACTERSET_ARABIC",0xb2);
define ("XLSFONT_CHARACTERSET_BALTIC",0xba);
define ("XLSFONT_CHARACTERSET_CYRILLIC",0xcc);
define ("XLSFONT_CHARACTERSET_THAI",0xde);
define ("XLSFONT_CHARACTERSET_LATIN2",0xee); // central european
define ("XLSFONT_CHARACTERSET_LATIN1",0xff);
class xls_font {
var $font_array = null;
public function xls_font() { // constructor
$this->font_array = array();
$this->append(null);
}
public function append($params) {
$font["name"] = (isset($params["name"]) ? $params["name"] : XLSFILE_DEFAULT_FONTNAME);
$font["height"] = (isset($params["height"]) ? $params["height"]*20 : XLSFILE_DEFAULT_FONTHEIGHT);
$font["weight"] = (isset($params["weight"]) ? $params["weight"] : XLSFONT_NORMAL);
$font["color"] = (isset($params["color"]) ? $params["color"] : XLSFILE_DEFAULT_FGCOLOR);
$font["underline"] = (isset($params["underline"]) ? $params["underline"] : XLSFONT_UNDERLINE_NONE);
$font["escapement"] = (isset($params["escapement"]) ? $params["escapement"] : XLSFONT_ESCAPE_NONE);
$font["family"] = (isset($params["family"]) ? $params["family"] : XLSFONT_FAMILY_NORMAL);
$font["style"] = (isset($params["style"]) ? $params["style"] : 0x0000);
$font["characterset"] = XLSFILE_CHARACTERSET;
$s = serialize($font);
unset($font);
$fontidx = array_search($s,$this->font_array);
if ($fontidx===false) {
$this->font_array[] = $s;
$fontidx = array_search($s,$this->font_array);
}
if ($fontidx>0) {
$fontidx += 5; // first 5 reserved, +5 for user defined font
}
$fontidx += (($fontidx==4) ? 1 : 0);
return $fontidx;
}
public function save($filehandle,$xls_biffobject) {
$font0 = unserialize($this->font_array[0]);
$xls_biffobject->clear(BIFF_FONT);
$xls_biffobject->append(XLSDATA_SHORT,$font0["height"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["style"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["color"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["weight"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["escapement"]);
$xls_biffobject->append(XLSDATA_BYTE,$font0["underline"]);
$xls_biffobject->append(XLSDATA_BYTE,$font0["family"]);
$xls_biffobject->append(XLSDATA_BYTE,$font0["characterset"]);
$xls_biffobject->append(XLSDATA_BYTE,0x0000);
$xls_biffobject->append(XLSDATA_STRING,$font0["name"]);
$repeatdefault = 4;
while ($repeatdefault>0) {
$xls_biffobject->save($filehandle);
$repeatdefault--;
}
$i=0;
while ($i!=count($this->font_array)) {
$font0 = unserialize($this->font_array[$i]);
$xls_biffobject->clear(BIFF_FONT);
$xls_biffobject->append(XLSDATA_SHORT,$font0["height"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["style"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["color"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["weight"]);
$xls_biffobject->append(XLSDATA_SHORT,$font0["escapement"]);
$xls_biffobject->append(XLSDATA_BYTE,$font0["underline"]);
$xls_biffobject->append(XLSDATA_BYTE,$font0["family"]);
$xls_biffobject->append(XLSDATA_BYTE,$font0["characterset"]);
$xls_biffobject->append(XLSDATA_BYTE,0x0000);
$xls_biffobject->append(XLSDATA_STRING,$font0["name"]);
$xls_biffobject->save($filehandle);
$i++;
}
}
}
?>

34
vendor/mergedcells.php

@ -0,0 +1,34 @@
<?php
class xls_mergedcells {
var $merged_array = null;
public function xls_mergedcells() {
$this->merged_array=array();
}
public function merge_cells($arowfirst, $arowlast, $acolfirst, $acollast) {
$this->merged_array[]=array("rowfirst" => $arowfirst, "rowlast" => $arowlast, "colfirst" => $acolfirst, "collast" => $acollast);
}
public function findpos($arow,$acol) {
foreach ($this->merged_array as $key => $data) {
if ((($arow>=$data["rowfirst"]) && ($arow<=$data["rowlast"])) && (($acol>=$data["colfirst"]) && ($acol<=$data["collast"]))) {
return array("row" => $data["rowfirst"],"col" => $data["colfirst"]);
}
}
return false;
}
public function save($filehandle,$xls_biffobject) {
$xls_biffobject->clear(BIFF_MERGEDCELLS);
$xls_biffobject->append(XLSDATA_SHORT,count($this->merged_array));
foreach ($this->merged_array as $key => $data) {
$xls_biffobject->append(XLSDATA_SHORT,$data["rowfirst"]);
$xls_biffobject->append(XLSDATA_SHORT,$data["rowlast"]);
$xls_biffobject->append(XLSDATA_SHORT,$data["colfirst"]);
$xls_biffobject->append(XLSDATA_SHORT,$data["collast"]);
}
$xls_biffobject->save($filehandle);
}
}
?>

294
vendor/palette.php

@ -0,0 +1,294 @@
<?php
class xls_palette {
var $htmlcolorarray = array("aliceblue" => "#f0f8ff",
"antiquewhite" => "#faebd7",
"aqua" => "#00ffff",
"aquamarine" => "#7fffd4",
"azure" => "#f0ffff",
"beige" => "#f5f5dc",
"bisque" => "#ffe4c4",
"black" => "#000000",
"blanchedalmond" => "#ffebcd",
"blue" => "#0000ff",
"blueviolet" => "#8a2be2",
"brown" => "#a52a2a",
"burlywood" => "#deb887",
"cadetblue" => "#5f9ea0",
"chartreuse" => "#7fff00",
"chocolate" => "#d2691e",
"coral" => "#ff7f50",
"cornflowerblue" => "#6495ed",
"cornsilk" => "#fff8dc",
"crimson" => "#dc143c",
"cyan" => "#00ffff",
"darkblue" => "#00008b",
"darkcyan" => "#008b8b",
"darkgoldenrod" => "#b8860b",
"darkgray" => "#a9a9a9",
"darkgrey" => "#a9a9a9",
"darkgreen" => "#006400",
"darkkhaki" => "#bdb76b",
"darkmagenta" => "#8b008b",
"darkolivegreen" => "#556b2f",
"darkorange" => "#ff8c00",
"darkorchid" => "#9932cc",
"darkred" => "#8b0000",
"darksalmon" => "#e9967a",
"darkseagreen" => "#8fbc8f",
"darkslateblue" => "#483d8b",
"darkslategray" => "#2f4f4f",
"darkslategrey" => "#2f4f4f",
"darkturquoise" => "#00ced1",
"darkviolet" => "#9400d3",
"deeppink" => "#ff1493",
"deepskyblue" => "#00bfff",
"dimgray" => "#696969",
"dimgrey" => "#696969",
"dodgerblue" => "#1e90ff",
"firebrick" => "#b22222",
"floralwhite" => "#fffaf0",
"forestgreen" => "#228b22",
"fuchsia" => "#ff00ff",
"gainsboro" => "#dcdcdc",
"ghostwhite" => "#f8f8ff",
"gold" => "#ffd700",
"goldenrod" => "#daa520",
"gray" => "#808080",
"grey" => "#808080",
"green" => "#008000",
"greenyellow" => "#adff2f",
"honeydew" => "#f0fff0",
"hotpink" => "#ff69b4",
"indianred" => "#cd5c5c",
"indigo" => "#4b0082",
"ivory" => "#fffff0",
"khaki" => "#f0e68c",
"lavender" => "#e6e6fa",
"lavenderblush" => "#fff0f5",
"lawngreen" => "#7cfc00",
"lemonchiffon" => "#fffacd",
"lightblue" => "#add8e6",
"lightcoral" => "#f08080",
"lightcyan" => "#e0ffff",
"lightgoldenrodyellow" => "#fafad2",
"lightgray" => "#d3d3d3",
"lightgrey" => "#d3d3d3",
"lightgreen" => "#90ee90",
"lightpink" => "#ffb6c1",
"lightsalmon" => "#ffa07a",
"lightseagreen" => "#20b2aa",
"lightskyblue" => "#87cefa",
"lightslategray" => "#778899",
"lightslategrey" => "#778899",
"lightsteelblue" => "#b0c4de",
"lightyellow" => "#ffffe0",
"lime" => "#00ff00",
"limegreen" => "#32cd32",
"linen" => "#faf0e6",
"magenta" => "#ff00ff",
"maroon" => "#800000",
"mediumaquamarine" => "#66cdaa",
"mediumblue" => "#0000cd",
"mediumorchid" => "#ba55d3",
"mediumpurple" => "#9370d8",
"mediumseagreen" => "#3cb371",
"mediumslateblue" => "#7b68ee",
"mediumspringgreen" => "#00fa9a",
"mediumturquoise" => "#48d1cc",
"mediumvioletred" => "#c71585",
"midnightblue" => "#191970",
"mintcream" => "#f5fffa",
"mistyrose" => "#ffe4e1",
"moccasin" => "#ffe4b5",
"navajowhite" => "#ffdead",
"navy" => "#000080",
"oldlace" => "#fdf5e6",
"olive" => "#808000",
"olivedrab" => "#6b8e23",
"orange" => "#ffa500",
"orangered" => "#ff4500",
"orchid" => "#da70d6",
"palegoldenrod" => "#eee8aa",
"palegreen" => "#98fb98",
"paleturquoise" => "#afeeee",
"palevioletred" => "#d87093",
"papayawhip" => "#ffefd5",
"peachpuff" => "#ffdab9",
"peru" => "#cd853f",
"pink" => "#ffc0cb",
"plum" => "#dda0dd",
"powderblue" => "#b0e0e6",
"purple" => "#800080",
"red" => "#ff0000",
"rosybrown" => "#bc8f8f",
"royalblue" => "#4169e1",
"saddlebrown" => "#8b4513",
"salmon" => "#fa8072",
"sandybrown" => "#f4a460",
"seagreen" => "#2e8b57",
"seashell" => "#fff5ee",
"sienna" => "#a0522d",
"silver" => "#c0c0c0",
"skyblue" => "#87ceeb",
"slateblue" => "#6a5acd",
"slategray" => "#708090",
"slategrey" => "#708090",
"snow" => "#fffafa",
"springgreen" => "#00ff7f",
"steelblue" => "#4682b4",
"tan" => "#d2b48c",
"teal" => "#008080",
"thistle" => "#d8bfd8",
"tomato" => "#ff6347",
"turquoise" => "#40e0d0",
"violet" => "#ee82ee",
"wheat" => "#f5deb3",
"white" => "#ffffff",
"whitesmoke" => "#f5f5f5",
"yellow" => "#ffff00",
"yellowgreen" => "#9acd32");
var $palette_array = array( 0x000000,
0xffffff,
0xff0000,
0x00ff00,
0x0000ff,
0xffff00,
0xff00ff,
0x00ffff,
0x800000,
0x008000,
0x000080,
0x808000,
0x800080,
0x008080,
0xc0c0c0,
0x808080,
0x9999ff,
0x993366,
0xffffcc,
0xccffff,
0x660066,
0xff8080,
0x0066cc,
0xccccff,
0x000080,
0xff00ff,
0xffff00,
0x00ffff,
0x800080,
0x800000,
0x008080,
0x0000ff,
0x00ccff,
0xccffff,
0xccffcc,
0xffff99,
0x99ccff,
0xff99cc,
0xcc99ff,
0xffcc99,
0x3366ff,
0x33cccc,
0x99cc00,
0xffcc00,
0xff9900,
0xff6600,
0x666699,
0x969696,
0x003366,
0x339966,
0x003300,
0x333300,
0x993300,
0x993366,
0x333399,
0xc7c7c7
);
public function getcoloridx($acolor) {
if (is_array($acolor)) {
$red = $acolor["red"];
$green = $acolor["green"];
$blue = $acolor["blue"];
return $this->findcolor($red,$green,$blue);
}
else if (!is_numeric($acolor)) {
if ($acolor{0}=="#") {
return $this->findhtmlcolor($acolor);
}
else {
return $this->findnamedcolor($acolor);
}
}
else {
$red = ($acolor & 0x00ff0000) >> 16;
$green = ($acolor & 0x0000ff00) >> 8;
$blue = ($acolor & 0x000000ff);
return $this->findcolor($red,$green,$blue);
}
}
public function findnamedcolor($colorname) {
if (!isset($this->htmlcolorarray[strtolower($colorname)])) { die("unknown color name."); }
return $this->findhtmlcolor($this->htmlcolorarray[strtolower($colorname)]);
}
public function findhtmlcolor($htmlcolor) {
$red = hexdec(substr($htmlcolor,1,2));
$green = hexdec(substr($htmlcolor,3,2));
$blue = hexdec(substr($htmlcolor,5,2));
return $this->findcolor($red,$green,$blue);
}
public function findcolor($ared,$agreen,$ablue) {
$rgbval = 0;
$rgbval = ($ared<<16) | ($agreen << 8) | ($ablue << 0);
// before allocate, check the color in the array
// if found, return colorindex
$colorindex = array_search($rgbval,$this->palette_array);
if ($colorindex===false) {
return $colorindex;
//$colorindex = count($this->palette_array);
//$this->palette_array[] = $rgbval;
}
$colorindex += 8;
return $colorindex;
}
public function change_color($idx,$color) {
$oldidx = $this->getcoloridx($color);
if ($oldidx!==false) { return $oldidx; }
if (is_array($color)) {
$red = $acolor["red"];
$green = $acolor["green"];
$blue = $acolor["blue"];
$rgbval = ($red<<16) | ($green << 8) | ($blue << 0);
$this->palette_array[$idx-8] = $rgbval;
}
else if (!is_numeric($color)) {
if ($color{0}=="#") {
$rgbval = hexdec(substr($color,1));
$this->palette_array[$idx-8] = $rgbval;
}
else {
if (!isset($this->htmlcolorarray[strtolower($color)])) { die("unknown color name."); }
$this->palette_array[$idx-8] = hexdec(substr($this->htmlcolorarray[strtolower($color)],1));
}
}
else {
$this->palette_array[$idx-8] = $color;
}
return $idx;
}
public function save($filehandle,$xls_biffobject) {
$xls_biffobject->clear(BIFF_PALETTE);
$xls_biffobject->append(XLSDATA_SHORT,count($this->palette_array));
foreach ($this->palette_array as $key => $color_data) {
$tmp = $color_data<<8;
$xls_biffobject->append(XLSDATA_DATA32BIT,$tmp);
}
$xls_biffobject->save($filehandle);
}
}
?>

230
vendor/picture.php

@ -0,0 +1,230 @@
<?php
/*
offs size data content
---------------------------------------
0000 , 02 : 5d 00 biff type, Object
0002 , 02 : 42 00 record length
0004 , 04 : 01 00 00 00 count of the objects in the file
0008 , 02 : 08 00 object type , 8 = picture
000a , 02 : 01 00 object ID
000c , 02 : 14 06 grbit
bit0 : =1, if the object selected
bit1 : =1, if the object moves and sizes with the cells
bit2 : =1, if the object moves with the cells
bit3 : reserved
bit4 : =1, if the object is locked when the sheet is protected
bit5..6 : reserved
bit7 : =1, if the object is part of a group of objects
bit8 : =1, if the object is hidden
bit9 : =1, if the object is visible
bit10 : =1, if the object is printable
bit11..15 : reserved
000e , 02 : 01 00 col-left
0010 , 02 : 00 00 x position in left column
0012 , 02 : 01 00 row-top
0014 , 02 : 00 00 y position in top row
0016 , 02 : 01 00 col-right
0018 , 02 : 30 00 x position in right column
001a , 02 : 01 00 row-bottom
001c , 02 : 26 00 y position in bottom row
001e , 02 : 00 00 fmla structure length
0020 , 04 : 00 00 05 00 00 00 reserved , must be zero ?
word-offset 0 : = 0
word offset 1 : = 0x0005
word-offset 2 : = 0
0026 , 01 : 09 background color index
0027 , 01 : 09 foreground color index
0028 , 01 : 00 fill pattern
0029 , 01 : 00 auto fill, bit0 = 1 if the automatic fill is turned on
002a , 01 : 08 line color index
002b , 01 : ff line style index
002c , 01 : 01 line weight
002d , 01 : 00 auto border, bit0 = 1 if the automatic borderis turned on
002e , 02 : 00 00 frame style
bit0 : =1 , if the rectangle has rounded corners
bit1 : =1 , if the rectangle has a shadow border
bit2..9 : diameter of the oval (actualy a circle) that defines the rounded corners (if bit1 set)
bit10..15 : unused
0030 , 02 : 09 00 image format
0032 , 04 : b9 10 05 37 reserved, must be zero ? wtf ???
0036 , 02 : 00 00 length of the picture FMLA structure
0038 , 02 : 00 00 reserved
003a , 02 : 01 00 grbit
bit0 : =0 if user manualy sizes picture by dragging a handle
bit1 : =1 if FMLA structure is a DDE reference
bit2 : =1 if the picture is from a DDE link, and the only available representation of the picture is an icon
bit3..15 : unused, must be zero ...
003c , 04 : 00 00 00 00 reserved
0040 , 01 : 05 length of the name
0041 , nn : 4b e9 70 20 31 name ,maybe contain a padding byte to force word boundary allignment (=Kép 1)
0000 , 02 : 7f 00 biff type, ImageData
0002 , 02 : 44 00 record length
0004 , 02 : 09 00 image format, 9 = windows bitmap format , 24bit truecolor
0006 , 02 : 01 00 enviroment from which file was written, 1= windows
0008 , 04 : 3c 00 00 00 image data length
000a .... image data
0c 00 00 00 04 00 04 00 01 00 18 00
ff 00 00 ff ff ff ff ff ff 00 00 00
ff ff ff ff 00 00 00 00 00 ff ff ff
ff ff ff 00 00 ff 00 ff 00 ff ff ff
00 00 ff ff ff ff ff ff ff 00 ff 00
*/
class xls_picture {
var $picture_array = null;
var $filename = null;
var $bgcolor = null;
var $bgcolorrgb = null;
var $fgcolor = null;
var $objectid = null;
var $firstrow = null;
var $firstcol = null;
var $lastrow = null;
var $lastcol = null;
var $imageright = null;
var $imagebottom = null;
var $imagewidth = null;
var $imageheight = null;
function xls_picture($afilename, $abgcolor, $afgcolor, $abgcolorrgb, $aobjectid, $arow, $acol) {
$this->picture_array = array();
$this->filename = $afilename;
$tmp = explode(".",$afilename);
if (count($tmp)<2) { die("missing filename extension."); }
if (!file_exists($afilename)) { die("file does not exist."); }
$this->bgcolor = $abgcolor;
$this->bgcolorrgb = $abgcolorrgb;
$this->fgcolor = $afgcolor;
$this->objectid = $aobjectid;
$this->firstrow = $arow;
$this->firstcol = $acol;
}
function scanimgline($imagehd, $line, $width, $bgcolor) {
for ($x=0; $x!=$width; $x++) {
$colorindex = imagecolorat($imagehd, $x, $line);
$rgb = imagecolorsforindex($imagehd, $colorindex);
if ($rgb["alpha"]!=0) {
$dstR = $bgcolor >> 16 & 0xFF;
$dstG = $bgcolor >> 8 & 0xFF;
$dstB = $bgcolor & 0xFF;
$rgb["red"] = (($rgb["red"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstR * $rgb["alpha"]) >> 8);
$rgb["green"] = (($rgb["green"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstG * $rgb["alpha"]) >> 8);
$rgb["blue"] = (($rgb["blue"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstB * $rgb["alpha"]) >> 8);
}
$this->picture_array[] = $rgb["blue"];
$this->picture_array[] = $rgb["green"];
$this->picture_array[] = $rgb["red"];
/*
$this->picture_array[] = ($colorindex >> 16) & 0x0ff;
$this->picture_array[] = ($colorindex >> 8) & 0x0ff;
$this->picture_array[] = $colorindex & 0x0ff;
*/
}
if ((count($this->picture_array) & 0x3)!=0) {
$fsize = count($this->picture_array) & 0x3;
$reqbytes = 0x4 - $fsize;
while ($reqbytes>0) {
$this->picture_array[] = 0;
}
}
}
function loaddata() {
$tmp = explode(".",$this->filename);
$ext = strtolower($tmp[count($tmp)-1]);
switch ($ext) {
case "bmp" : die("Windows BitMaP file not supported.");
break;
case "gif" : $img=imagecreatefromgif($this->filename);
break;
case "jpg" :
case "jpeg" : $img=imagecreatefromjpeg($this->filename);
break;
case "png" : $img=imagecreatefrompng($this->filename);
break;
case "xbm" : $img=imagecreatefromxbm($this->filename);
break;
case "xpm" : $img=imagecreatefromxpm($this->filename);
break;
default : die("Invalid / unknown filetype (extension).");
break;
}
$this->imagewidth = imagesx($img);
$this->imageheight = imagesy($img);
$y=$this->imageheight;
while ($y>0) {
$y--;
$this->scanimgline($img, $y, $this->imagewidth, $this->bgcolorrgb);
}
imagedestroy($img);
}
function save($filehandle,$xls_biffobject) {
$xls_biffobject->clear(BIFF_OBJECT);
$xls_biffobject->append(XLSDATA_LONG,1); // one object
$xls_biffobject->append(XLSDATA_SHORT,8); // obj,type = picture
$xls_biffobject->append(XLSDATA_SHORT,$this->objectid);
$xls_biffobject->append(XLSDATA_SHORT,0x0614);
$xls_biffobject->append(XLSDATA_SHORT,$this->firstcol);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,$this->firstrow);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,$this->lastcol);
$xls_biffobject->append(XLSDATA_SHORT,$this->imageright);
$xls_biffobject->append(XLSDATA_SHORT,$this->lastrow);
$xls_biffobject->append(XLSDATA_SHORT,$this->imagebottom);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,0x0005);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_BYTE,$this->bgcolor);
$xls_biffobject->append(XLSDATA_BYTE,$this->fgcolor);
$xls_biffobject->append(XLSDATA_BYTE,0);
$xls_biffobject->append(XLSDATA_BYTE,0);
$xls_biffobject->append(XLSDATA_BYTE,8);
$xls_biffobject->append(XLSDATA_BYTE,0xff);
$xls_biffobject->append(XLSDATA_BYTE,1);
$xls_biffobject->append(XLSDATA_BYTE,0);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,0x0009);
//$xls_biffobject->append(XLSDATA_LONG,0x370510b9);
$xls_biffobject->append(XLSDATA_LONG,0x00000000);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,0);
$xls_biffobject->append(XLSDATA_SHORT,0x0001);
$xls_biffobject->append(XLSDATA_LONG,0x0000);
$s = "Picture".$this->objectid;
$xls_biffobject->append(XLSDATA_STRING,$s);
$xls_biffobject->save($filehandle);
$xls_biffobject->clear(BIFF_IMAGEDATA);
$xls_biffobject->append(XLSDATA_SHORT,0x0009);
$xls_biffobject->append(XLSDATA_SHORT,0x0001);
$xls_biffobject->append(XLSDATA_LONG,count($this->picture_array)+12);
if (defined("PICTUREDEBUG")) {
echo "picture size : ".count($this->picture_array)." (".dechex(count($this->picture_array)).")<br>\n";
}
$xls_biffobject->append(XLSDATA_LONG,0x0000000c);
$xls_biffobject->append(XLSDATA_SHORT,$this->imagewidth);
$xls_biffobject->append(XLSDATA_SHORT,$this->imageheight);
$xls_biffobject->append(XLSDATA_SHORT,1);
$xls_biffobject->append(XLSDATA_SHORT,24);
foreach ($this->picture_array as $data) {
$xls_biffobject->append(XLSDATA_BYTE,$data);
}
$xls_biffobject->save($filehandle);
}
}
?>

238
vendor/xf.php

@ -0,0 +1,238 @@
<?php
define ("XLSXF_TYPE_PROT_CELLLOCKED", 0x01);
define ("XLSXF_TYPE_PROT_FORMULAHIDDEN", 0x02);
define ("XLSXF_TYPE_PROT_STYLEXF", 0x04);
define ("XLSXF_TYPE_PROT_F123PREFIX", 0x08);
define ("XLSXF_USEDATTRIB_ATRNUM" ,0x04);
define ("XLSXF_USEDATTRIB_ATRFONT" ,0x08);
define ("XLSXF_USEDATTRIB_ATRALC" ,0x10);
define ("XLSXF_USEDATTRIB_ATRBDR" ,0x20);
define ("XLSXF_USEDATTRIB_ATRPAT" ,0x40);
define ("XLSXF_USEDATTRIB_ATRPROT" ,0x80);
// horizontal allignment
define ("XLSXF_HALLIGN_GENERAL", 0x00);
define ("XLSXF_HALLIGN_LEFT" , 0x01);
define ("XLSXF_HALLIGN_CENTER" , 0x02);
define ("XLSXF_HALLIGN_RIGHT" , 0x03);
define ("XLSXF_HALLIGN_FILL" , 0x04);
define ("XLSXF_HALLIGN_JUSTIFY", 0x05);
define ("XLSXF_HALLIGN_CACROSS", 0x06); // center across selection
//define ("XLSXF_HALLIGN_DISTRIBUTED", 0x07); not used in BIFF5 , available in Excel 10.0 (Excel XP) and later
// vertical allignment
define ("XLSXF_VALLIGN_TOP" , 0x00);
define ("XLSXF_VALLIGN_CENTER" , 0x10);
define ("XLSXF_VALLIGN_BOTTOM" , 0x20);
define ("XLSXF_VALLIGN_JUSTIFY", 0x30);
//define ("XLSXF_VALLIGN_DISTRIBUTED", 0x40); not used in BIFF5 , available in Excel 10.0 (Excel XP) and later
define ("XLSXF_WRAPTEXT", 0x08); // wrap text at right border
define ("XLSXF_TEXTROTATION_NOROTATION", 0x00);
define ("XLSXF_TEXTROTATION_UPRIGHT", 0x01); // text appears top-to-bottom; letters are upright.
define ("XLSXF_TEXTROTATION_COUNTERCLOCKWISE", 0x02); // text is rotated 90 degrees counterclockwise
define ("XLSXF_TEXTROTATION_CLOCKWISE", 0x03); // text is rotated 90 degrees clockwise
define ("XLSXF_BORDER_NOBORDER", 0x00);
define ("XLSXF_BORDER_THIN", 0x01);
define ("XLSXF_BORDER_MEDIUM", 0x02);
define ("XLSXF_BORDER_DASHED", 0x03);
define ("XLSXF_BORDER_DOTTED", 0x04);
define ("XLSXF_BORDER_THICK", 0x05);
define ("XLSXF_BORDER_DOUBLE", 0x06);
define ("XLSXF_BORDER_HAIR", 0x07);
/*
not used in BIFF5 , available in BIFF8 (Excel 10.0 / Excel XP) and later
define ("XLSXF_BORDER_MEDIUMDASHED", 0x08);
define ("XLSXF_BORDER_THINDASHDOT", 0x09);
define ("XLSXF_BORDER_MEDIUMDASHDOT", 0x0a);
define ("XLSXF_BORDER_THINDASHDOTDOT", 0x0b);
define ("XLSXF_BORDER_MEDIUMDASHDOTDOT", 0x0c);
define ("XLSXF_BORDER_SLANTEDDASHDOT", 0x0d);
*/
class xls_xf {
var $xf_array = null;
var $defaultxf = null;
public function xls_xf() {
$this->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);
}
}
}
?>

1414
vendor/xls_export.php

File diff suppressed because it is too large
Loading…
Cancel
Save