Wpis

Klasa do generowania plików .xls (Microsoft Excel)

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;;
        }
}
Ten post jest udostępniony na licencji CC BY 4.0 przez autora.