Klasa do generowania plików .xls (Microsoft Excel)
Po wielu poszukiwaniach prostej klasy do generowania “Exceli” znalazłem takową, i okazało się, że się sprawdza (przynajmniej mi się sprawdziła).
Klasa generuje kod XLSa na podstawie mutitablicy.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Excel
{
function xlsBOF() {
$data = pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return $data;
}
function xlsEOF() {
$data = pack("ss", 0x0A, 0x00);
return $data;
}
function xlsWriteNumber($Row, $Col, $Value) {
$data = pack("sssss", 0x203, 14, $Row, $Col, 0x0);
$data .= pack("d", $Value);
return $data;
}
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
$data = pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
$data .= $Value;
return $data;
}
function generateXLS($array)
{
$data = $this->xlsBOF();
$amount = count($array);
for($i=0;$i<$amount;$i++)
{
$row = $array[$i];
$amount_row = count($row);
for($j=0;$j<$amount_row;$j++)
{
if((int)$row[$j])
{
$data .= $this->xlsWriteNumber($i,$j,$row[$j]);
}
else
{
$data .= $this->xlsWriteLabel($i,$j,$row[$j]);
}
}
}
$data .= $this->xlsEOF();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=$filename.xls ");
header("Content-Transfer-Encoding: binary ");
echo $data;;
}
}