一定还有很多的问题,比如设置列宽时很麻烦,也没有什么很高深的东西。写是为了自己先记下来防止以后忘了。
首先肯定要下载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 ,