ThinkPHP中使用PHPExcel导出Excel

一定还有很多的问题,比如设置列宽时很麻烦,也没有什么很高深的东西。写是为了自己先记下来防止以后忘了。
首先肯定要下载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 ,
posted @ 2014-05-09 11:08  Aroundight  阅读(421)  评论(0编辑  收藏  举报