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 ,
  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/aroundight/p/3718470.html
Copyright © 2011-2022 走看看