原生态的写法
原始方式:发送header,用附件的表头发送到用户浏览器表示是要下载的,然后读出数据库中的数据,一条一条的解析,写入excel格式的文件中
代码如下 | 复制代码 |
<?php $DB_Server = "localhost"; $DB_Username = "root"; $DB_Password = ""; $DB_DBName = "DBName"; $DB_TBLName = "DB_TBLName"; $savename = date("YmjHis"); $Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect."); mysql_query("Set Names 'gbk'"); $file_type = "vnd.ms-excel"; $file_ending = "xls"; header("Content-Type: application/$file_type;charset=gbk"); header("Content-Disposition: attachment; filename=".$savename.".$file_ending"); header("Pragma: no-cache"); $now_date = date("Y-m-j H:i:s"); $title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date"; $sql = "Select * from $DB_TBLName"; $ALT_Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database"); $result = @mysql_query($sql,$Connect) or die(mysql_error()); echo("$titlen"); $sep = "t"; for ($i = 0;$i < mysql_num_fields($result);$i++) { echo mysql_field_name($result,$i) . "t"; } print("n"); $i = 0; while($row = mysql_fetch_row($result)) { $schema_insert = ""; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= "NULL".$sep; elseif ($row[$j] != "") $schema_insert .= "$row[$j]".$sep; else $schema_insert .= "".$sep; } $schema_insert = str_replace($sep."$", "", $schema_insert); $schema_insert .= "t"; print(trim($schema_insert)); print "n"; $i++; } return (true); ?> |
用PHPExcel库
下面是用PHPExcel实现的与上面功能相同的excel的方法。getCol为递归实现的函数,用于根据数字返回对应的列号编码。因为导出的过程中需要指出行号,列号。行号为简单的数字,而列号则为“A-Z”的组合。为了方便二维数组的导入,根据列数自动得到列号编码
使用说明:
1、将后面的代码存为excel.php,然后在页面中调用它。
2、然后调用 xlsBOF(),将一些内容写入到xlswritenunber() 或者 xlswritelabel()中,最后调用 xlsEOF()结束。
也可以用 fwrite 函数直接写到服务器上,而不是用echo 仅仅在浏览器上显示。
下面是PHP代码:
代码如下 | 复制代码 |
<?php // ----- begin of function library ----- // Excel begin of file header function xlsBOF() { echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); return; } // Excel end of file footer function xlsEOF() { echo pack("ss", 0x0A, 0x00); return; } // Function to write a Number (double) into Row, Col function xlsWriteNumber($Row, $Col, $Value) { echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); echo pack("d", $Value); return; } // Function to write a label (text) into Row, Col function xlsWriteLabel($Row, $Col, $Value ) { $L = strlen($Value); echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); echo $Value; return; } ?> 下面是调用代码: <?php |
完整实例
代码如下 | 复制代码 |
<? //设置PHPExcel类库的include path set_include_path('.'. PATH_SEPARATOR . 'D:ZealPHP_LIBS' . PATH_SEPARATOR . get_include_path()); /** // uncomment // 创建一个处理对象实例 // 创建文件格式写入对象实例, uncomment //************************************* //************************************* $objActSheet = $objExcel->getActiveSheet(); //设置当前活动sheet的名称 //************************************* //显式指定内容类型 //合并单元格 //分离单元格 //************************************* //设置宽度 $objStyleA5 = $objActSheet->getStyle('A5'); //设置单元格内容的数字格式。 //设置字体 //设置对齐方式 //设置边框 //设置填充颜色 //从指定的单元格复制样式信息. //************************************* //添加一个新的worksheet //保护单元格 //************************************* ?> |