php导出CSV方法 (转)

 

制作网站时,经常会遇到检索数据列表的情况。通常用户希望下载这些列表数据并存储到客户端。当然下载这些数据的时候是需要固定的格式,以便于用Excel等软件阅览。说的简单一些就是CSV/Excel数据导出 。

注意事项:

输出文档的基本格式为:列1,列2,列3,……,列n/n

格式化数据的同时要对特殊的字符进行过滤。譬如“,”如果不转换为全角“,”会导致数据格式的混乱。

实现方法:

举例:检索数据库表,将结果保存为字符串,进行格式和特殊字符的过滤后,导出到客户端的CSV文件。 

OrderSearchEdit_saveCSV.php

<? php
include ( $_SERVER [ ' DOCUMENT_ROOT ' .   " /ftcart/OrderInfoManager.class.php " );
include ( $_SERVER [ ' DOCUMENT_ROOT ' .   " /ftcart/CommonUtil.php " );
include ( $_SERVER [ ' DOCUMENT_ROOT ' .   " /ftcart/CommonConst.php " );
include ( $_SERVER [ ' DOCUMENT_ROOT ' .   " /ftcart/CommonErrorMsg.php " );
include ( $_SERVER [ ' DOCUMENT_ROOT ' .   " /webadmin.php " );

$searchcase   =   new  OrderInfoManager();
$nowTime   =  microtime_float();
$searchcase   =   unserialize ( $_SESSION [ " ORDER_SEARCH_CASE " ]);
$listcsv   =   $searchcase -> doCSV(); //  调用doCSV()方法
$filename   =   $nowTime ;
// $filename = str_replace(":","",$nowTime);
//$filename = trim($filename);
//echo $filename;

header ( " Content-Disposition: attachment; filename= " . $filename . " .csv " );
header ( ' Content-Type:APPLICATION/OCTET-STREAM ' );
echo   " 注文No.,注文日,氏名,住所,支払い方法,合計金額,発送 " ;
echo   $listcsv ;
?>

doCSV()方法:

function  doCSV(){
global   $db ;
$nowdate   =  getNowDateYYYYMMDD();
$SQL   =   " ##### " ;                
$rs = $db -> query( $SQL );
$result ;
$payment_method ;
$delivery_status ;
if  (( !  DB :: isError( $rs ))) {
    
while  ( $row   =   $rs -> fetchRow()){
    
$row   =  Common_record( $row );
    
if ( $row [ ' payment_method_id ' ] == 0 ){ $payment_method = " 銀行振り込み " ;}
    
else   if ( $row [ ' payment_method_id ' ] == 1 ){ $payment_method = " 郵便局 " ;}
    
else   if ( $row [ ' payment_method_id ' ] == 2 ){ $payment_method = " 代引き " ;}
    
else { $payment_method = "" ;}
                    
    
if ( $row [ ' actual_send_date ' ] > $nowdate ){ $delivery_status = " 未発送 " ;}
    
else   if ( $row [ ' actual_send_date ' ] < $nowdate ){ $delivery_status = " 発送済 " ;}
    
// 格式化并过滤特殊字符                
     $result   .=   $row [ ' order_id ' ] . " , " .
    
$row [ ' create_date ' ] . " , " .
    
$row [ ' order_first_name ' ] . "    " .
    
$row [ ' order_last_name ' ] . " , " .
    
str_replace ( " , " , " " , $row [ ' order_address ' ]) . " , " .
    
$payment_method . " , " .
    
$row [ ' amount ' ] . " , " .
    
$delivery_status . " " ;    
    }
    
return   $result ;        
               }        
}    

 

这样就ok啦,在你的导出数据html页面做一个<input type="button" οnclick="do_CSV()">然后在JS里面写一个提交form的do_CSV(),并将form action到OrderSearchEdit_saveCSV.php就完成了。应该注意的是由于OrderSearchEdit_saveCSV.php中声明的是一个Content-Type:APPLICATION/OCTET-STREAM所以当前页面不会被刷新。这点可能大家都知道,不过我是刚学到的,所以记录一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PhpSpreadsheet导出CSV文件,你需要按照以下步骤进行操作: 1. 首先,导入所需的类和命名空间。你需要导入`PhpOffice\PhpSpreadsheet\Spreadsheet`和`PhpOffice\PhpSpreadsheet\Writer\Csv`类。你可以使用以下代码导入它们: ```php use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Csv; ``` 2. 创建一个新的`Spreadsheet`对象,并设置你的数据。你可以使用`getActiveSheet()`方法获取当前活动的工作表,并使用`setCellValue()`方法设置单元格的值。例如,你可以使用以下代码设置A1单元格的值为"Hello World": ```php $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World'); ``` 3. 创建一个`Csv`写入器对象,并将`Spreadsheet`对象传递给它。然后,使用`save()`方法将数据保存为CSV文件。你可以指定保存的文件路径和文件名。例如,你可以使用以下代码将数据保存为名为"output.csv"的CSV文件: ```php $writer = new Csv($spreadsheet); $writer->save('output.csv'); ``` 请注意,以上代码只是一个示例,你可以根据自己的需求进行修改和扩展。确保在使用PhpSpreadsheet之前,你已经安装了它并将其包含在你的项目中。 希望这可以帮助到你! #### 引用[.reference_title] - *1* [fastadmin+phpspreadsheet实现导出和导入](https://blog.csdn.net/Jian_Sir/article/details/130004153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值