一定还有很多的问题,比如设置列宽时很麻烦,也没有什么很高深的东西。写是为了自己先记下来防止以后忘了。
首先肯定要下载PHPEXCEL 后放到项目里。
以下是控制器中的代码
require APP_PATH . 'Common/PHPExcel/PHPExcel.php'; // 引入PHPExcel,自己修改路径,表示根目录下的/Common/PHPExcel/PHPExcel.php
public function MakeExcel() { $model = D('goods'); $map['goods.Activefly'] = 1; if ($_POST['goodsn'] != "") { $map['goods.GoodName'] = array('like', '%' . trim($_POST['goodsn']) . '%'); } if ($_POST['goodother'] != "") { $map['goods.GoodModel'] = array('like', '%' . trim($_POST['goodother']) . '%'); } if ($_POST['gm'] != "") { $map['goods.Goodhaoma'] = array('like', '%' . trim($_POST['gm']) . '%'); } if ($_POST['gtx'] != "") { $map['goods.GoodBarcode'] = array('like', '%' . trim($_POST['gtx']) . '%'); } if ($_POST['gl'] != "") { $map['type.TypeID'] = array('like', '%' . trim($_POST['gl']) . '%'); } if ($_POST['gd'] != "") { $map['unit.UnitID'] = array('like', '%' . trim($_POST['gd']) . '%'); } if ($_POST['gs'] != "") { $map['goods.GoodNumber'] = array('like', '%' . trim($_POST['gs']) . '%'); } if ($_POST['gj'] != "") { $map['goods.GoodSellPrice'] = array('like', '%' . trim($_POST['gj']) . '%'); } $list = $model->table('think_goods goods ,think_goods_type type, think_goods_unit unit')->where('goods.TypeID = type.TypeID and goods.UnitID = unit.UnitID')->order('Goodhaoma desc')->where($map)->select(); $objPhpExcel = new PHPExcel(); //$objPhpExcel->getActiveSheet()->getDefaultColumnDimension()->setAutoSize(true); //设置单元格宽度 //设置表的宽度 $rowABC = array(0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', 4 => 'E', 5 => 'F', 6 => 'G', 7 => 'H', 8 => 'I', 9 => 'J'); foreach ($rowABC as $k => $r) { $objPhpExcel->getActiveSheet()->getColumnDimension($r)->setWidth(20); //设置表格的宽度 手动 //$objPhpExcel->getActiveSheet()->getColumnDimension('A:K')->setAutoSize(TRUE); //设置表格的宽度 手动 } $objPhpExcel->getActiveSheet()->getColumnDimension('K')->setWidth(120); //设置表格的宽度 手动 //$objPhpExcel->getActiveSheet()->getStyle('A:K')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); //a:k 内容为文本,为防止出现科学计数法 $objPhpExcel->getActiveSheet()->getStyle('A:J')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //a:k 内容为剧中 //对第一行标题进行设置 $rowVal = array(0 => '物品编号', 1 => '物品名称', 2 => '条形码', 3 => '物品型号', 4 => '物品库存', 5 => '物品类别', 6 => '安全库存', 7 => '物品价格', 8 => '物品单位', 9 => '备注', 10 => '库位及数量(库位:数量|库位:数量|库位:数量)'); foreach ($rowVal as $k => $r) { $objPhpExcel->getActiveSheet()->getStyleByColumnAndRow($k, 1) ->getFont()->setBold(true); //字体加粗 $objPhpExcel->getActiveSheet()->getStyleByColumnAndRow($k, 1)-> getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //文字居中 $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow($k, 1, $r); //加载内容 } $objPhpExcel->setActiveSheetIndex(0); $objActSheet = $objPhpExcel->getActiveSheet(); //设置当前活动的sheet的名称 $title = "物品基础数据列表"; $objActSheet->setTitle($title); //设置单元格内容 foreach ($list as $k => $v) { $num = $k + 2; //$k起始为0,内容是从第2行开始的所以+2 $sg = D('storage_goods'); $sgwhere["Goodhaoma"] = $v['Goodhaoma']; $sglist = $sg->table('think_storage s,think_storage_goods sg')->where('s.StorageID=sg.StorageID')->where($sgwhere)->select(); if ($sglist != null) { $string = $sglist[0]['StorageName'] . ":" . $sglist[0]['StockNember']; for ($i = 1; $i < count($sglist); $i++) { $string = $string . "| " . $sglist[$i]['StorageName'] . ":" . $sglist[$i]['StockNember']; } } else { $string = ""; } $objPhpExcel->setActiveSheetIndex(0) //Excel的第A列,uid是你查出数组的键值,下面以此类推 ->setCellValueExplicit('A' . $num, $v['Goodhaoma'], PHPExcel_Cell_DataType::TYPE_STRING) //防止因数字太长而出现科学计数法 在设置值的同时指定数据类型为文本 ->setCellValue('B' . $num, $v['GoodName']) ->setCellValueExplicit('C' . $num, $v['GoodBarcode'], PHPExcel_Cell_DataType::TYPE_STRING) ->setCellValue('D' . $num, $v['GoodModel']) ->setCellValueExplicit('E' . $num, $v['GoodNumber'], PHPExcel_Cell_DataType::TYPE_STRING) ->setCellValue('F' . $num, $v['TypeName']) ->setCellValueExplicit('G' . $num, $v['GoodSS'], PHPExcel_Cell_DataType::TYPE_STRING) ->setCellValueExplicit('H' . $num, $v['GoodSellPrice'], PHPExcel_Cell_DataType::TYPE_STRING) ->setCellValue('I' . $num, $v['UnitName']) ->setCellValue('J' . $num, $v['GoodRemark']) ->setCellValue('K' . $num, $string); } $name = date('Y-m-d'); //设置文件名 header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Transfer-Encoding:utf-8"); header("Pragma: no-cache"); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $title . '_' . urlencode($name) . '.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPhpExcel, 'Excel5'); $objWriter->save('php://output'); }
接下来是重点html中的代码
<a name="MakeExcel" href="<?php echo U('Base/MakeExcel') ?>">导出excel</a>
呵呵
如果有问题的话在config.php中添加'OUTPUT_ENCODE' => false ,