Oct
15

Export MySQL To Excel better way

PHP, SQL          Trackback

I showed you how to export your MySQL tables to MS Excel file, but that wasn’t real excel files we were creating. Actually you were getting CSV and HTML files which excel can read. These were textual files, and now I am gonna show you how to create binary excel file: [SOURCE CODE]



*/
	$dbHost	= 'myserver';			//	database host
	$dbUser	= 'myusername';		//	database user
	$dbPass	= 'mypassword';		//	database password
	$dbName	= 'mydatabase'; 		//	database name
	$dbTable = 'mytable';			// table name

	$connection = @mysql_connect($dbHost, $dbUser, $dbPass) or die("Couldn't connect.");
	$db = mysql_select_db($dbName, $connection) or die("Couldn't select database.");

	function excelHeader() {
		$now_date 	= date('m_d_Y');					//date for title

		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=export_$now_date.xls");
		header("Content-Transfer-Encoding: binary ");

		echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
		return;
	}

	function excelFooter() {
		echo pack("ss", 0x0A, 0x00);
		return;
	}

	function excelWriteNumber($row, $col, $value) {
		echo pack("sssss", 0x203, 14, $row, $col, 0x0);
		echo pack("d", $value);
		return;
	}

	function excelWriteLabel($row, $col, $value ) {
		$len = strlen($value);
		echo pack("ssssss", 0x204, 8 + $len, $row, $col, 0x0, $len).$value;
		return;
	}

	excelHeader();

	$sql = "SELECT * FROM `$dbTable`";
	//execute query
	$result = @mysql_query($sql)
		or die("Couldn't execute query:".mysql_error().''.mysql_errno().''.$sql);

	for ($i = 0; $i < mysql_num_fields($result); $i++) 	//print column names as names of MySQL fields
		excelWriteLabel(0, $i, mysql_field_name($result, $i));

	$excelRow = 1;
	while($row = mysql_fetch_row($result)) {
		$excelCol = 0;
		foreach($row as $value) {
			if (is_int($value))
				excelWriteNumber($excelRow, $excelCol, $value);
			else
				excelWriteLabel($excelRow, $excelCol, $value);
			$excelCol++;
		}
		$excelRow++;
	}
	excelFooter();
?>


No Comments

Make A Comment

No comments yet.

Comments RSS Feed    TrackBack URL

Leave a comment

top