[PHP] 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 |
<br/> <?php<br/>class Excel<br/>{<br/> function xlsBOF() {<br/> $data = pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); <br/> return $data;<br/> }<br/> <br/> function xlsEOF() {<br/> $data = pack("ss", 0x0A, 0x00);<br/> return $data;<br/> }<br/> <br/> function xlsWriteNumber($Row, $Col, $Value) {<br/> $data = pack("sssss", 0x203, 14, $Row, $Col, 0x0);<br/> $data .= pack("d", $Value);<br/> return $data;<br/> }<br/> <br/> function xlsWriteLabel($Row, $Col, $Value ) {<br/> $L = strlen($Value);<br/> $data = pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);<br/> $data .= $Value;<br/> return $data;<br/> }<br/> <br/> function generateXLS($array)<br/> {<br/> $data = $this->xlsBOF();<br/> $amount = count($array);<br/> for($i=0;$i<$amount;$i++)<br/> {<br/> $row = $array[$i];<br/> $amount_row = count($row);<br/> for($j=0;$j<$amount_row;$j++)<br/> {<br/> if((int)$row[$j])<br/> {<br/> $data .= $this->xlsWriteNumber($i,$j,$row[$j]);<br/> }<br/> else<br/> {<br/> $data .= $this->xlsWriteLabel($i,$j,$row[$j]);<br/> }<br/> }<br/> }<br/> $data .= $this->xlsEOF();<br/> header("Pragma: public");<br/> header("Expires: 0");<br/> header("Cache-Control: must-revalidate, post-check=0, pre-check=0");<br/> header("Content-Type: application/force-download");<br/> header("Content-Type: application/octet-stream");<br/> header("Content-Type: application/download");<br/> header("Content-Disposition: attachment;filename=$filename.xls ");<br/> header("Content-Transfer-Encoding: binary ");<br/> echo $data;;<br/> }<br/>}<br/>?> |
