第一步:导出字段设置
(1)准备导出的字段,存放在:Conf/purchaseExport.php
<?php
return array (
‘sname’ => ‘仓库名称’,
‘title’ => ‘产品名称’,
‘standard’ => ‘规格’,
‘unit’ => ‘单位’,
‘buyprice’ => ‘单价’,
‘goods_num’ => ‘采购数量’,
‘total_money’ => ‘总价’,
‘purchase_time’ => ‘采购时间’,
);
(2)修改purchaseExport.php
控制器代码:
//采购订单导出字段设置
Public function purchaseExport(){
$ file name=$this->_get(‘type’);
if(IS_POST){
$this->setExportField($filename);
}else{
$this->file= include CONF_PATH.’purchaseExport.php’;
$this->display();
}
}
/*
* 设置要导出的字段
*/
private function setExportField($filename){
$fieldFile = CONF_PATH.$filename.’.php’;
$str = “<?phprnreturn ” . var_export($_POST, true) . “;rn?>”;
file_put_contents($fieldFile, $str);
redirect(‘$filename’);
}
前台模板代码:
详见MyAccount/purchaseExport.html
第二步:调用第三方插件PHPExcel导出指定条件的Excel文档数据
/*
* 导出采购订单
*/
public function purchaseExport(){
$file=include APP_NAME.’/Conf/purchaseExport.php’;
unset($_REQUEST[‘_URL_’]);
$this->setCondition($_REQUEST);//调用查询条件处理方法
$purchase = D(‘Purchase_orderView’)->where($this->conditions)->select();//获取要导出的数据
$purchase=$this->purchaseInfo($purchase);
$this->excelExport($file, $purchase);//调用导出Excel文档的函数
}
/**
* 导出Excel文档的函数
* @param unknown $file [要导出的字段]
* @param unknown $data [要导出的数据]
*/
public function excelExport($file,$data){
import(“Class.PHPExcel.PHPExcel”,APP_PATH);
$objPHPExcel = new PHPExcel();
$objProps = $objPHPExcel->getProperties();
$objProps->setCreator(“School System”);
$objProps->setLastModifiedBy(“School System”);
$objProps->setTitle(“School System”);
$objProps->setSubject(“School System Data”);
$objProps->setDescription(“School System Data”);
$objProps->setKeywords(“School System”);
$objProps->setCategory(“School System”);
$objPHPExcel->setActiveSheetIndex(0);
$objActSheet = $objPHPExcel->getActiveSheet();
$objActSheet->setTitle(‘Sheet1’);
//设置标题
$ascii = 65;
$cv = ”;
foreach ($file as $v){
$objActSheet->setCellValue($cv.chr($ascii).’1′, $v);
$ascii++;
if($ascii == 91){
//第一次:$cv=A;第二次:$cv=B
$ascii = 65;
$cv .= chr(strlen($cv)+65);
}
}
//填充数据
$i = 1;
foreach ($data as $k => $v) {
//一条记录填充一行
$i++;
$ascii = 65;
$cv = ”;
foreach($file as $key => $value){
$objActSheet->setCellValue($cv.chr($ascii).$i, $v[$key]);
$ascii++;
if($ascii == 91){
//第一次:$cv=A;第二次:$cv=B
$ascii = 65;
$cv .= chr(strlen($cv)+65);
}
}
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);
header (“Content-Type: application/vnd.ms-excel;”);
header(“Content-Disposition:attachment;filename=MyAccount_”.date(‘d’,mktime()).”. xlsx “);
header(“Pragma:no-cache”);
header(“Expires:0”);
$objWriter->save(‘php://output’);
}
第三步:导入/导出Excel文档错误分析
声明:所有的PHP文档的编码格式必须是“UTF-8无BOM格式编码”
一般是由于你的服务器配置了其他的压缩方式导致冲突,
这个时候你可以手动关闭OUTPUT_ENCODE(ThinkPHP3.1后新增的功能,默认是开启的),
即:’OUTPUT_ENCODE’=> false (在配置文件中设置即可,3.1以后才支持配置)
如果想正确输出Excel文档,则在配置文件中需增加一句:
‘OUTPUT_ENCODE’ => false//关闭“页面压缩功能”(默认是开启的!!!)
前言:
3.1版本开始,增加了OUTPUT_ENCODE配置参数,用于控制页面压缩输出。
会自动检测zlib.output_compression配置,如果php. ini 里面
zlib.output_compression没有开启,
并且OUTPUT_ENCODE配置开启,则会进行页面压缩输出==>
Excel文档不能够正确输出!!!
php. ini文件 修改:
extension=php_gettext. dll
extension=php_xmlrpc.dll
extension=php_zip.dll