web页面中导出Excel (方法六) 后端php导出CSV
使用后端 php 来实现导出Excel
优点:兼容 所有 PHP 版本。超快,适合大数据量。Excel 能直接打开。 如果不需要复杂格式,CSV 是最轻量的方案。
缺点: 导出的不是Excel格式 。 不支持复杂格式(颜色、公式等)
html
<a href='javascript:void(0)' class='easyui-linkbutton' iconCls='icon-excel' plain='true' onclick='ToExcel()' <{$ToExcel_disabled}> >导出</a>
js
function ToExcel(){ var where=""; var order=""; var query=Select_Parameter();// 查询条件 var url='Ajax-index.php?module=<{$module_name}>&action=Ajax_GridView_Select&assigned_user_id=<{$assigned_user_id}>&start_time=<{$start_date}>&stop_time=<{$stop_date}>'; /* 获取 where 条件 */ $.ajax({ url: url, type: "post", data: query, dataType: "json", success: function (data) { //alert(data.where); alert(data.total); where=data.where;//将条件 传出 order=data.order;//排序 //alert(where); if(where==""){ $.messager.alert('消息','没有要导出的数据,请点击查询,再试! ','info'); return; } location.href=encodeURI('modules/<{$module_name}>/ToExcel_CSV.php?where='+where +"&order=" +order); } }); }
重点在这句上,其它的是为了获取查询条件
location.href=encodeURI('modules/<{$module_name}>/ToExcel_CSV.php?where='+where +"&order=" +order);
ToExcel_CSV.php
<?php error_reporting(E_ALL^E_NOTICE);//Notice不显示 ^E_DEPRECATED set_time_limit(0);//不设 php 超时限制 require_once('../../config.php'); require_once('../../Log/LogHelper2.php'); require_once('../../myClass/myDBHelper2.php'); $table_name='woke_order_repair'; $arr_result = array(); //返回值 $where='';//查询条件 $order=""; if(!empty($_GET['where'])){ if($_GET['where']!=""){ $where=$_GET['where']; if(!empty($_GET['order'])){//$_GET['order'] 存在则赋值 不存在则默认为"" $order=$_GET['order']; } }else{ $where=' 1=0 ';//查不到的数据 } }else{ $where=' 1=0 ';//查不到的数据 } $where=stripslashes($where); $order=stripslashes($order); $col=" id,contact_name,contact_callerid, date_entered , contact_source,media_name,media_date,contact_province,contact_city,contact_address,order_type,order_status "; $col.=" ,product_name,repair_date_appointment,repair_date,install_office,repair_worker,description,repair_description,assigned_user_name "; $col.=" ,serivce_money,product_parts_money,sum_money,received_money,pay_date,pay_description,cashier_name "; $sql = "select {$col} from {$table_name} where ".$where .$order ;//." limit $offset,$rows "; deleted=0 //WriteLog($sql); $row = array(); $row[]="编号";//0 $row[]="姓名"; $row[]="电话号码"; $row[]="创建时间"; $row[]="客户来源"; $row[]="媒体名称";//media_name 媒体名称 $row[]="媒体时间";//media_date 媒体时间 $row[]="省份"; $row[]="城市"; $row[]="地址"; $row[]="工单类型"; $row[]="工单状态";//11 $row[]="机器名称"; $row[]="预约维修时间"; //repair_date_appointment $row[]="实际维修时间"; //换芯时间 repair_date $row[]="办事处"; $row[]="维修人员"; //repair_worker $row[]="工单备注";//description $row[]="维修备注";//repair_description $row[]="客服";//19 $row[]="服务费";//serivce_money $row[]="配件金额";//product_parts_money $row[]="总金额";//sum_money $row[]="实收金额";//实收金额 received_money $row[]="收款时间";//收款时间 pay_date $row[]="收款备注";//收款备注 pay_description $row[]="出纳";//26 出纳 cashier_name $row[]="配件名称";// $row[]="单价";// $row[]="数量";// $row[]="小计"; $items = array(); array_push($items, $row); $result=$db->query($sql); while($row_order=$db->fetch_array($result)){ //查明细表 woke_order_change_core_detail 表 根据 order_change_core_id 取 $col_detail=" part_name ,price ,number ,subtotal "; //实收金额 $order=" order by date_entered desc "; $sql_detail = "select {$col_detail} from woke_order_repair_detail where order_repair_id='".$row_order['id'] ."' " .$order; //WriteLog($sql_detail); $result_detail=$db->query($sql_detail); $i=26; while($row_detail=$db->fetch_array($result_detail)){ $i++; //WriteLog($i); $row_order[$i]=$row_detail[0]; $i++; $row_order[$i]=$row_detail[1]; $i++; $row_order[$i]=$row_detail[2]; $i++; $row_order[$i]=$row_detail[3]; } array_push($items, $row_order); } //Excel文件名 $date_now=date("YmdHis",strtotime("now")); $fileName="Book".$date_now; exportCSV($fileName,$items); return; // function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=GBK'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); $output = fopen('php://output', 'w'); // 使用 create_function 替代匿名函数 $convertToGBK = create_function('$item', 'return iconv("UTF-8", "GBK//IGNORE", $item);'); foreach ($data as $row) { $convertedRow = array_map($convertToGBK, $row); fputcsv($output, $convertedRow); } fclose($output); exit; } ?>
兼容 PHP 4.0.1+
function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=GBK'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); $output = fopen('php://output', 'w'); // 使用 create_function 替代匿名函数 $convertToGBK = create_function('$item', 'return iconv("UTF-8", "GBK//IGNORE", $item);'); foreach ($data as $row) { $convertedRow = array_map($convertToGBK, $row); fputcsv($output, $convertedRow); } fclose($output); exit; }
普通 foreach 循环(兼容所有 PHP 版本)
function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=GBK'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); $output = fopen('php://output', 'w'); foreach ($data as $row) { $convertedRow = array(); foreach ($row as $item) { $convertedRow[] = iconv('UTF-8', 'GBK//IGNORE', $item); } fputcsv($output, $convertedRow); } fclose($output); exit; }
提前定义转换函数(兼容 PHP 4+)
function convertToGBK($item) { return iconv('UTF-8', 'GBK//IGNORE', $item); } function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=GBK'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); $output = fopen('php://output', 'w'); foreach ($data as $row) { $convertedRow = array_map('convertToGBK', $row); fputcsv($output, $convertedRow); } fclose($output); exit; }
最佳兼容性(PHP 5.2 及以下)
function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=GBK'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); $output = fopen('php://output', 'w'); foreach ($data as $row) { $convertedRow = array(); foreach ($row as $item) { $convertedRow[] = iconv('UTF-8', 'GBK//IGNORE', $item); } fputcsv($output, $convertedRow); } fclose($output); exit; }
PHP 5.2 以上 需要使用 array_map() 在 PHP 5.2 及以下版本 不支持匿名函数
function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=GBK'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); $output = fopen('php://output', 'w'); // 不需要 BOM,直接转码 foreach ($data as $row) { $convertedRow = array_map(function($item) { return iconv('UTF-8', 'GBK//IGNORE', $item); }, $row); fputcsv($output, $convertedRow); } fclose($output); exit; }
强制使用 UTF-8 BOM
function exportCSV($fileName, $data) { header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="' . $fileName . '.csv"'); // 直接输出 BOM 头(确保在 fopen 之前) echo "\xEF\xBB\xBF"; $output = fopen('php://output', 'w'); foreach ($data as $row) { fputcsv($output, $row); } fclose($output); exit; }

浙公网安备 33010602011771号