zoukankan      html  css  js  c++  java
  • 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 ,
  • 相关阅读:
    powershell 更新 IIS SSL 证书
    让 .NET 轻松构建中间件模式代码(二)
    让 .NET 轻松构建中间件模式代码
    小白学数据分析----->学习注册转化率
    说说第三方服务
    小白学数据分析----->ARPPU的误区
    写在2013年最后一天
    小白学数据分析----->移动游戏的使用时长分析
    小白学数据分析----->付费用户生命周期研究
    小白学数据分析----->什么才是留存率的关键?
  • 原文地址:https://www.cnblogs.com/aroundight/p/3718470.html
Copyright © 2011-2022 走看看