PHPExcel导入导出

慕课教程 -- PHPExcel导入导出

一、PHPExcel导出操作

1.快速入门

<?php
#找到当前脚本的路径
$dir = dirname(__FILE__);
#引入PHPExcel插件文件
require $dir."/excel/PHPExcel.php";
#实例化PHPExcel类
$objPHPExcel = new PHPExcel();
#获得当前活动sheet的操作对象
$objSheet = $objPHPExcel->getActiveSheet();
#给当前的活动sheet设置名称
$objSheet->setTitle(‘demo‘);
#给当前活动sheet填充数据
$objSheet->setCellValue(‘A1‘,‘姓名‘)->setCellValue(‘B1‘,‘分数‘);
$objSheet->setCellValue(‘A2‘,‘张三‘)->setCellValue(‘B2‘,‘100‘);
#按照指定格式生成Excel文件
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel2007‘);
#将生成的Excel文件保存到指定的路径
$objWrite->save($dir.‘/demo01_1.xlsx‘);
echo ‘ok!‘;
?>

生成结果:

除了以上的方式填充数据,还可以使用数组的形式:

<?php
#找到当前脚本的路径
$dir = dirname(__FILE__);
#引入PHPExcel插件文件
require $dir."/excel/PHPExcel.php";
#实例化PHPExcel类
$objPHPExcel = new PHPExcel();
#获得当前活动sheet的操作对象
$objSheet = $objPHPExcel->getActiveSheet();
#给当前的活动sheet设置名称
$objSheet->setTitle(‘demo‘);
#给当前活动sheet填充数据:不推荐此方法,消耗内存大
$data = array(
    array(),
    array(‘‘,‘姓名‘,‘分数‘),
    array(‘‘,‘Curry‘,‘100‘),
    array(‘‘,‘James‘,‘59‘),
);
$objSheet->fromArray($data);
#按照指定格式生成Excel文件
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel2007‘);
#将生成的Excel文件保存到指定的路径
$objWrite->save($dir.‘/demo01_2.xlsx‘);
echo ‘ok!‘;
?>

生成结果:

2.PHPExcel导出MySQL数据库数据

student.sql

--
-- 数据库: `phpexcel`
--

-- --------------------------------------------------------

--
-- 表的结构 `student`
--

CREATE TABLE IF NOT EXISTS `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `score` float NOT NULL,
  `grade` int(10) unsigned DEFAULT NULL comment ‘年级‘,
  `class` int(10) unsigned DEFAULT NULL comment ‘班级‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;

--
-- 转存表中的数据 `student`
--

INSERT INTO `student` (`id`, `name`, `score`, `grade`, `class`) VALUES
(1, ‘马化腾‘, 40, 1, 1),
(2, ‘詹姆斯‘, 68, 2, 1),
(3, ‘王博‘, 98, 3, 1),
(4, ‘李梅‘, 65, 1, 1),
(5, ‘雷军‘, 97, 2, 1),
(6, ‘黎明‘, 80, 3, 1),
(7, ‘景甜‘, 84, 1, 1),
(8, ‘哈桑‘, 65, 2, 1),
(9, ‘阿米尔‘, 98, 3, 1),
(10, ‘奥巴马‘, 100, 1, 2),
(11, ‘范冰冰‘, 87, 2, 2),
(12, ‘李冰冰‘, 89, 3, 2),
(13, ‘迪丽热巴‘, 90, 1, 2),
(14, ‘梁金秀‘, 91, 2, 2),
(15, ‘赵默笙‘, 92, 3, 2),
(16, ‘汤唯‘, 96, 1, 2),
(17, ‘小明‘, 70, 2, 2),
(18, ‘大锤‘, 71, 3, 2),
(19, ‘逗比‘, 72, 1, 2),
(20, ‘王无‘, 73, 2, 3),
(21, ‘建平‘, 74, 3, 3),
(22, ‘郭富城‘, 80, 1, 3),
(23, ‘张学友‘, 95, 2, 3),
(24, ‘金莎‘, 86, 3, 3),
(25, ‘李克强‘, 56, 1, 3),
(26, ‘天山‘, 89, 2, 3),
(27, ‘周唯一‘, 87, 3, 3),
(28, ‘周国平‘, 85, 1, 3),
(29, ‘陈建军‘, 62, 2, 3),
(30, ‘暴走哥‘, 90, 3, 3);

dbconfig.php

<?php
/*
    MYSQL config-file
 */
$config = array(
    ‘host‘ => ‘127.0.0.1‘,
    ‘username‘ => ‘root‘,
    ‘password‘ => ‘‘,
    ‘database‘ => ‘phpexcel‘,
    ‘charset‘ => ‘utf8‘,
);
?>

db.php

<?php
// 引入配置文件
require dirname(__FILE__).‘/dbconfig.php‘;
class db{
    public $conn = null;
    // 构造方法:实例化的时候自动调用
    public function __construct($config)
    {
        #连接数据库
        $this->conn = mysql_connect($config[‘host‘],$config[‘username‘],$config[‘password‘]) or die(mysql_error());
        #选择数据库
        mysql_select_db($config[‘database‘],$this->conn) or die(mysql_error());
        #设置字符编码
        mysql_query("set names " . $config[‘charset‘]) or die(mysql_error());
    }

    // 根据传入的SQL语句 查询Mysql结果集
    public function getResult($sql)
    {
        #查询sql语句
        $resource = mysql_query($sql,$this->conn) or die(mysql_error());
        $res = array();
        while(($row = mysql_fetch_assoc($resource))!= false)
        {
            $res[] = $row;
        }
        return $res;
    }

    // 根据传入的年级数,查询每个年级的学生数据
    public function getDataByGrade($grade)
    {
        #组织SQL语句
        $sql = "select name,score,grade from student where grade=" .$grade. " order by score desc";
        $res = self::getResult($sql);
        return $res;
    }

}

?>

案例1:exprot_1.php -- 将结果生成excel文件

<?php
#查找当前脚本所在的路径
$dir = dirname(__FILE__);
#引入db类文件
require $dir.‘/excel/db.php‘;
#引入PHPExcel插件文件
require $dir.‘/excel/PHPExcel.php‘;
$db = new db($config);
$objPHPExcel = new PHPExcel();
for($i = 1;$i <= 3;$i++)
{
    #注意:默认第一个sheet不用创建:createSheet()
    if($i > 1)
    {
        #创建新的内置表
        $objPHPExcel->createSheet();
    }
    #把新创建的sheet设置为当前活动sheet
    $objPHPExcel->setActiveSheetIndex($i - 1);
    #获取当前活动的sheet
    $objSheet = $objPHPExcel->getActiveSheet();
    #给当前活动的sheet起个名字
    $objSheet->setTitle($i.‘年级‘);
    #查询每个年级的学生数据
    $data = $db->getDataByGrade($i);
    #填充数据
    $objSheet->setCellValue(‘A1‘,‘姓名‘)->setCellValue(‘B1‘,‘分数‘)->setCellValue(‘C1‘,‘年级‘);
    $j = 2;
    #遍历学生数据
    foreach ($data as $key => $v) {
        $objSheet->setCellValue(‘A‘.$j,$v[‘name‘])->setCellValue(‘B‘.$j,$v[‘score‘])->setCellValue(‘C‘.$j,$v[‘grade‘]);
        $j++;
    }
}
#生成excel文件
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
#保存文件
$objWrite->save($dir.‘/export_1.xls‘);
echo ‘ok!‘;

?>

生成结果:

    

案例1:exprot_2.php -- 将结果输出浏览器

<?php
#查找当前脚本所在的路径
$dir = dirname(__FILE__);
#引入db类文件
require $dir.‘/excel/db.php‘;
#引入PHPExcel插件文件
require $dir.‘/excel/PHPExcel.php‘;
$db = new db($config);
$objPHPExcel = new PHPExcel();
for($i = 1;$i <= 3;$i++)
{
    if($i > 1)
    {
        #创建新的内置表
        $objPHPExcel->createSheet();
    }
    #把新创建的sheet设置为当前活动sheet
    $objPHPExcel->setActiveSheetIndex($i - 1);
    #获取当前活动的sheet
    $objSheet = $objPHPExcel->getActiveSheet();
    #给当前活动的sheet起个名字
    $objSheet->setTitle($i.‘年级‘);
    #查询每个年级的学生数据
    $data = $db->getDataByGrade($i);
    #填充数据
    $objSheet->setCellValue(‘A1‘,‘姓名‘)->setCellValue(‘B1‘,‘分数‘)->setCellValue(‘C1‘,‘年级‘);
    $j = 2;
    #遍历学生数据
    foreach ($data as $key => $v) {
        $objSheet->setCellValue(‘A‘.$j,$v[‘name‘])->setCellValue(‘B‘.$j,$v[‘score‘])->setCellValue(‘C‘.$j,$v[‘grade‘]);
        $j++;
    }
}
#生成excel文件
// $objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel2007‘);
#调用方法,判断EXCEL文件类型
browser_export(‘Excel2007‘,‘export_browser.xlsx‘);
// browser_export(‘Excel5‘,‘export_browser.xls‘);
#浏览器输出
$objWrite->save("php://output");

function browser_export($type,$filename)
{
    #Excel5 - 03   Excel2007 - 07
    if($type == ‘Excel5‘)
    {
        #excel-2003
        header(‘Content-Type: application/vnd.ms-excel‘);
    }
    else
    {
        #excel-2007
        header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘);
    }
    #注意输出的文件文件:不设置输出浏览器文件名字,则使用当前脚本的名字
    header(‘Content-Disposition: attachment;filename=‘.$filename);
    header(‘Cache-Control: max-age=0‘);
}
?>

生成结果

3.Excel样式控制(一)

<?php
#查找当前脚本所在的路径
$dir = dirname(__FILE__);
#引入db类文件
require $dir.‘/excel/db.php‘;
#引入PHPExcel插件文件
require $dir.‘/excel/PHPExcel.php‘;
$db = new db($config);
$objPHPExcel = new PHPExcel();
#获得当前活动单元格
$objSheet = $objPHPExcel->getActiveSheet();
/*
    样式控制部分
 */
#设置excel文件默认水平垂直方向居中
$objSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
#设置默认字体大小和格式
$objSheet->getDefaultStyle()->getFont()->setSize(14)->setName("微软雅黑");
#设置第二行字体大小和加粗
$objSheet->getStyle("A2:Z2")->getFont()->setSize(20)->setBold(TRUE);
#设置第三行字体大小和加粗
$objSheet->getStyle("A3:Z3")->getFont()->setSize(14)->setBold(TRUE);
$gradeinfo = $db->getAllGrade();
#获取所有的年级数据
$gradeInfo = $db->getAllGrade();
#列数标志
$index = 0;
#遍历年级信息获取每个年级的班级数据
foreach ($gradeInfo as $g_k => $g_v)
{
    #获取年级信息所在的列
    $beginGradeIndex = getCells($index * 2);
    #设置年级列标题
    $objSheet->setCellValue($beginGradeIndex.‘2‘,‘高‘.$g_v[‘grade‘]);
    $classInfo = $db->getClassByGrade($g_v[‘grade‘]);
    #根据年级班级获取每个学生的数据
    foreach ($classInfo as $c_k => $c_v)
    {
        #设置姓名列的标志
        $nameIndex = getCells($index*2);
        #设置分数列的标志
        $gradeIndex = getCells($index*2+1);
        $info = $db->getDataByClassGrade($g_v[‘grade‘],$c_v[‘class‘]);
        #设置班级列标题
        $objSheet->setCellValue($nameIndex.‘3‘,$c_v[‘class‘].‘班‘);
        #合并班级
        $objSheet->mergeCells($nameIndex.‘3:‘.$gradeIndex.‘3‘);
        #填充班级背景颜色
        $objSheet->getStyle($nameIndex.‘3:‘.$gradeIndex.‘3‘)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB(‘6fc144‘);
        #获取年级边框样式代码
        $classBorder=getBorderStyle("00FF00");
        #设置每个年级的边框
        $objSheet->getStyle($nameIndex.‘3:‘.$gradeIndex.‘3‘)->applyFromArray($classBorder);
        #设置文字自动换行
        $objSheet->getStyle($nameIndex)->getAlignment()->setWrapText(true);
        #设置姓名列标题
        $objSheet->setCellValue($nameIndex.‘4‘,"姓名\n自动换行")->setCellValue($gradeIndex.‘4‘,‘分数‘);
        #设置某列单元格格式为文本格式
         $objSheet->getStyle($gradeIndex)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
        #行数标志
        $j = 5;
        #遍历学生信息
        foreach ($info as $k => $v) {
            //填充学生信息
            #对单元格的数据类型进行设置:设置为字符类型
            $objSheet->setCellValue($nameIndex.$j,$v[‘name‘])->setCellValueExplicit($gradeIndex.$j,$v[‘score‘]."12321321321321312",PHPExcel_Cell_DataType::TYPE_STRING);
            // $objSheet ->setCellValue($nameIndex.$j,$v[‘name‘])->setCellValue($gradeIndex.$j,$v[‘score‘]);
            #行数自增 +1
            $j++;
        }
        $index++;
    }
    #获得每个年级终止的单元格
    $endGradeIndex = getCells($index * 2 -1);
    #合并年级的单元格
    $objSheet->mergeCells($beginGradeIndex.‘2:‘.$endGradeIndex.‘2‘);
    #填充年级背景颜色
    $objSheet->getStyle($beginGradeIndex.‘2:‘.$endGradeIndex.‘2‘)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB(‘c1b644‘);
    #获取年级边框样式代码
    $gradeBorder=getBorderStyle("c144b1");
    #设置每个年级的边框
    $objSheet->getStyle($beginGradeIndex.‘2:‘.$endGradeIndex.‘2‘)->applyFromArray($gradeBorder);

}

#生成excel文件
// $objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
#调用方法,判断EXCEL文件类型
browser_export(‘Excel5‘,‘export_browser.xls‘);
// browser_export(‘Excel5‘,‘export_browser.xls‘);
#浏览器输出
$objWrite->save("php://output");

function browser_export($type,$filename)
{
    #Excel5 - 03   Excel2007 - 07
    if($type == ‘Excel5‘)
    {
        #excel-2003
        header(‘Content-Type: application/vnd.ms-excel‘);
    }
    else
    {
        #excel-2007
        header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘);
    }
    #注意输出的文件文件:不设置输出浏览器文件名字,则使用当前脚本的名字
    header(‘Content-Disposition: attachment;filename=‘.$filename);
    header(‘Cache-Control: max-age=0‘);
}

function getCells($index)
{
    $arr = range(‘A‘, ‘Z‘);
    return $arr[$index];
}

/**
**获取边框样式代码
**/
    function getBorderStyle($color){
            $styleArray = array(
                ‘borders‘ => array(
                    ‘outline‘ => array(
                        ‘style‘ => PHPExcel_Style_Border::BORDER_THICK,
                        ‘color‘ => array(‘rgb‘ => $color),
                    ),
                ),
            );
            return $styleArray;
    }
?>

生成结果:

4.Excel样式控制(二)

<?php
#查找当前脚本所在的路径
$dir = dirname(__FILE__);
#引入db类文件
require $dir.‘/excel/db.php‘;
#引入PHPExcel插件文件
require $dir.‘/excel/PHPExcel.php‘;
$db = new db($config);
$objPHPExcel = new PHPExcel();
#获得当前活动单元格
$objSheet = $objPHPExcel->getActiveSheet();
/*
    样式控制部分
 */
#设置excel文件默认水平垂直方向居中
$objSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
#设置默认字体大小和格式
$objSheet->getDefaultStyle()->getFont()->setSize(14)->setName("微软雅黑");
#设置第二行字体大小和加粗
$objSheet->getStyle("A2:Z2")->getFont()->setSize(20)->setBold(TRUE);
#设置第三行字体大小和加粗
$objSheet->getStyle("A3:Z3")->getFont()->setSize(14)->setBold(TRUE);
$gradeinfo = $db->getAllGrade();
#获取所有的年级数据
$gradeInfo = $db->getAllGrade();
#列数标志
$index = 0;
#遍历年级信息获取每个年级的班级数据
foreach ($gradeInfo as $g_k => $g_v)
{
    #获取年级信息所在的列
    $beginGradeIndex = getCells($index * 2);
    #设置年级列标题
    $objSheet->setCellValue($beginGradeIndex.‘2‘,‘高‘.$g_v[‘grade‘]);
    $classInfo = $db->getClassByGrade($g_v[‘grade‘]);
    #根据年级班级获取每个学生的数据
    foreach ($classInfo as $c_k => $c_v)
    {
        #设置姓名列的标志
        $nameIndex = getCells($index*2);
        #设置分数列的标志
        $gradeIndex = getCells($index*2+1);
        $info = $db->getDataByClassGrade($g_v[‘grade‘],$c_v[‘class‘]);
        #设置班级列标题
        $objSheet->setCellValue($nameIndex.‘3‘,$c_v[‘class‘].‘班‘);
        #合并班级
        $objSheet->mergeCells($nameIndex.‘3:‘.$gradeIndex.‘3‘);
        #填充班级背景颜色
        $objSheet->getStyle($nameIndex.‘3:‘.$gradeIndex.‘3‘)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB(‘6fc144‘);
        #获取年级边框样式代码
        $classBorder=getBorderStyle("00FF00");
        #设置每个年级的边框
        $objSheet->getStyle($nameIndex.‘3:‘.$gradeIndex.‘3‘)->applyFromArray($classBorder);
        #设置文字自动换行
        $objSheet->getStyle($nameIndex)->getAlignment()->setWrapText(true);
        #设置姓名列标题
        $objSheet->setCellValue($nameIndex.‘4‘,"姓名\n自动换行")->setCellValue($gradeIndex.‘4‘,‘分数‘);
        #设置某列单元格格式为文本格式
         $objSheet->getStyle($gradeIndex)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
        #行数标志
        $j = 5;
        #遍历学生信息
        foreach ($info as $k => $v) {
            //填充学生信息
            #对单元格的数据类型进行设置:设置为字符类型
            $objSheet->setCellValue($nameIndex.$j,$v[‘name‘])->setCellValueExplicit($gradeIndex.$j,$v[‘score‘]."12321321321321312",PHPExcel_Cell_DataType::TYPE_STRING);
            // $objSheet ->setCellValue($nameIndex.$j,$v[‘name‘])->setCellValue($gradeIndex.$j,$v[‘score‘]);
            #行数自增 +1
            $j++;
        }
        $index++;
    }
    #获得每个年级终止的单元格
    $endGradeIndex = getCells($index * 2 -1);
    #合并年级的单元格
    $objSheet->mergeCells($beginGradeIndex.‘2:‘.$endGradeIndex.‘2‘);
    #填充年级背景颜色
    $objSheet->getStyle($beginGradeIndex.‘2:‘.$endGradeIndex.‘2‘)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB(‘c1b644‘);
    #获取年级边框样式代码
    $gradeBorder=getBorderStyle("c144b1");
    #设置每个年级的边框
    $objSheet->getStyle($beginGradeIndex.‘2:‘.$endGradeIndex.‘2‘)->applyFromArray($gradeBorder);

}

#生成excel文件
// $objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
#调用方法,判断EXCEL文件类型
browser_export(‘Excel5‘,‘export_browser.xls‘);
// browser_export(‘Excel5‘,‘export_browser.xls‘);
#浏览器输出
$objWrite->save("php://output");

function browser_export($type,$filename)
{
    #Excel5 - 03   Excel2007 - 07
    if($type == ‘Excel5‘)
    {
        #excel-2003
        header(‘Content-Type: application/vnd.ms-excel‘);
    }
    else
    {
        #excel-2007
        header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘);
    }
    #注意输出的文件文件:不设置输出浏览器文件名字,则使用当前脚本的名字
    header(‘Content-Disposition: attachment;filename=‘.$filename);
    header(‘Cache-Control: max-age=0‘);
}

function getCells($index)
{
    $arr = range(‘A‘, ‘Z‘);
    return $arr[$index];
}

/**
**获取边框样式代码
**/
    function getBorderStyle($color){
            $styleArray = array(
                ‘borders‘ => array(
                    ‘outline‘ => array(
                        ‘style‘ => PHPExcel_Style_Border::BORDER_THICK,
                        ‘color‘ => array(‘rgb‘ => $color),
                    ),
                ),
            );
            return $styleArray;
    }
?>

生成结果:

5.PHP操作Excel生成图形报表

<?php
#查找当前脚本所在的路径
$dir = dirname(__FILE__);
#引入db类文件
require $dir.‘/excel/db.php‘;
#引入PHPExcel插件文件
require $dir.‘/excel/PHPExcel.php‘;
$db = new db($config);
$objPHPExcel = new PHPExcel();
#获得当前活动单元格
$objSheet = $objPHPExcel->getActiveSheet();
/*
    PHP操作Excel生成图形报表
 */
#数据信息
$data = array(
    array(‘‘,‘一班‘,‘二班‘,‘三班‘),
    array(‘不及格‘,20,30,40),
    array(‘良好‘,21,35,25),
    array(‘优秀‘,14,16,19),
);
#加载数据
$objSheet->fromArray($data);
#图表代码编写
#先取得绘制图表的标签
$labels= array(
    new PHPExcel_Chart_DataSeriesValues(‘String‘,‘Worksheet!$B$1‘,null,1),//一班
    new PHPExcel_Chart_DataSeriesValues(‘String‘,‘Worksheet!$C$1‘,null,1),//二班
    new PHPExcel_Chart_DataSeriesValues(‘String‘,‘Worksheet!$D$1‘,null,1),//三班
);
#X轴:取得图表的X轴刻度
$xlabels = array(
    new PHPExcel_Chart_DataSeriesValues(‘String‘,‘Worksheet!$A$2:$A$4‘,null,3),
);
#取得绘图所需要的数据
$datas = array(
    new PHPExcel_Chart_DataSeriesValues(‘Number‘,‘Worksheet!$B$2:$B$4‘,null,3),//一班
    new PHPExcel_Chart_DataSeriesValues(‘Number‘,‘Worksheet!$C$2:$C$4‘,null,3),//二班
    new PHPExcel_Chart_DataSeriesValues(‘Number‘,‘Worksheet!$D$2:$D$4‘,null,3),//三班
);
#根据取得的东西用于获取图表的框架
$series = array(
    new PHPExcel_Chart_DataSeries(
            PHPExcel_Chart_DataSeries::TYPE_LINECHART,
            PHPExcel_Chart_DataSeries::GROUPING_STANDARD,
            range(0,count($labels) - 1),
            $labels,
            $xlabels,
            $datas
    )

);
$layout = new PHPExcel_Chart_layout();
$layout->setShowVal(true);
$areas = new PHPExcel_Chart_PlotArea($layout,$series);
$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT,$layout,false);
#设定图表的标题
$title = new PHPExcel_Chart_Title(‘高一学生成绩分布‘);
$ytitle = new PHPExcel_Chart_Title(‘单位(人数)‘);
$chart = new PHPExcel_Chart(
    ‘line_chart‘,
     $title,
     $legend,
     $areas,
     true,
     false,
     null,
     $ytitle

);
#生成图表的位置
$chart->setTopLeftPosition(‘A7‘)->setBottomRightPosition(‘K25‘);
#将chart添加到表格当中
$objSheet->addChart($chart);

#生成excel文件
// $objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel5‘);
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,‘Excel2007‘);
#加载生成好的图表
$objWrite->setIncludeCharts(true);
#调用方法,判断EXCEL文件类型
browser_export(‘Excel2007‘,‘chart.xlsx‘);
// browser_export(‘Excel5‘,‘export_browser.xls‘);
#浏览器输出
$objWrite->save("php://output");

function browser_export($type,$filename)
{
    #Excel5 - 03   Excel2007 - 07
    if($type == ‘Excel5‘)
    {
        #excel-2003
        header(‘Content-Type: application/vnd.ms-excel‘);
    }
    else
    {
        #excel-2007
        header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘);
    }
    #注意输出的文件文件:不设置输出浏览器文件名字,则使用当前脚本的名字
    header(‘Content-Disposition: attachment;filename=‘.$filename);
    header(‘Cache-Control: max-age=0‘);
}

?>

生成结果:

二、PHPExcel导入操作

1.PHP导入Excel

数据 -- read.xls

1.1全部读取

<?php
/*
    PHPExcel导入:全部读取
 */
header("Content-Type:text/html;charset=utf-8");
$dir = dirname(__FILE__);
#引入读取Execl的类文件
require $dir."/excel/PHPExcel/IOFactory.php";
#获取要读取文件的路径和文件名
$filename = $dir."/read.xls";
#加载Excel文件
$objPHPExcel = PHPExcel_IOFactory::load($filename);
#获取Excel文件中sheet的总数
/*
$sheetCount = $objPHPExcel->getSheetCount();
for ($i=0; $i < $sheetCount; $i++) {
    $data = $objPHPExcel->getSheet($i)->toArray();
    print_r($data);
}
*/
#循环取sheet
foreach ($objPHPExcel->getWorksheetIterator() as $sheet)
{
    #逐行处理
    foreach ($sheet->getRowIterator() as $row)
    {
        if ($row->getRowIndex() < 2)
        {
            continue;
        }
        #逐列读取
        foreach ($row->getCellIterator() as $cell) {
            $data = $cell->getValue();
            echo $data.‘ ‘;

        }
        echo ‘<br />‘;

    }
    echo ‘<br />‘;
}
?>

生成结果:

1.2部分读取

<?php
/*
    PHPExcel导入:部分加载/选择加载
 */
header("Content-Type:text/html;charset=utf-8");
$dir = dirname(__FILE__);
#引入读取Execl的类文件
require $dir."/excel/PHPExcel/IOFactory.php";
#获取要读取文件的路径和文件名
$filename = $dir."/read.xls";
#自动获取Excel的文件类型
$filetype= PHPExcel_IOFactory::identify($filename);
#获取文件读取操作对象
$objReader = PHPExcel_IOFactory::createReader($filetype);
#选择要读取的sheet
// $sheetname = "一年级";
$sheetname = array("一年级","二年级");
$objReader->setLoadSheetsOnly($sheetname);

#加载Excel文件
$objPHPExcel = $objReader->load($filename);
#获取Excel文件中sheet的总数
/*
$sheetCount = $objPHPExcel->getSheetCount();
for ($i=0; $i < $sheetCount; $i++) {
    $data = $objPHPExcel->getSheet($i)->toArray();
    print_r($data);
}
*/
#循环取sheet
foreach ($objPHPExcel->getWorksheetIterator() as $sheet)
{
    #逐行处理
    foreach ($sheet->getRowIterator() as $row)
    {
        if ($row->getRowIndex() < 2)
        {
            continue;
        }
        #逐列读取
        foreach ($row->getCellIterator() as $cell) {
            $data = $cell->getValue();
            echo $data.‘ ‘;

        }
        echo ‘<br />‘;

    }
    echo ‘<br />‘;
}
?>

生成结果:

PHPExcel启用缓存

小结:

时间: 2025-01-04 11:02:58

PHPExcel导入导出的相关文章

使用PHPExcel导入导出excel格式文件

使用PHPExcel导入导出excel格式文件 作者:zccst 由于导出使用较多,下面是导出实现过程. 第一步,将PHPExcel的源代码复制到项目的lib下 文件包括:PHPExcel.php 和 文件夹PHPExcel 源代码见附件 注1:源代码是zip格式,能在windows和linux通用. 注2:PHPExcel.zip是干净代码,可以直接引用.PHPExcel2.zip有svn记录,不适合直接引用. 第二步:在需要导出的handler页面中引用 1,在头部引入三个文件 Php代码 

thinkphp5 使用PHPExcel 导入导出

首先下载PHPExcel类.网上很多,自行下载. 然后把文件放到vendor文件里面. 一般引用vendor里面的类或者插件用vendor(); 里面加载的就是vendor文件,然后想要加载哪个文件,直接写就行,中间的"."相当于文件路径的"/". 例如加载excel5这个文件: 先把html代码贴出来(整个导入导出的): <form enctype="multipart/form-data" method="post"

phpexcel 导入导出

导出excel /** * 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要 * 打开对应行的注释. * 如果使用 Excel5 ,输出的内容应该是GBK编码. */ //require_once 'PHPExcel.php'; // uncomment ////require_once 'PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls // or ////require_once 'PHPExcel/Writer/Excel200

PHPExcel导入导出常用方法总结

最近公司后台管理系统需求,要用PHP导出excel表格数据,所以特整理了一下常用的方法供大家参考: PHPExcel扩展包地址:https://github.com/wanqianworld/phpexcel-1.8 大致的分为几个部分: 一.导出的方法及步骤 1.引入PHPExcel文件:require_once("../Classes/PHPExcel.php"); 2.实例化PHPExcel:$ObjPHPExcel = new PHPExcel(); 3.获取当前工作sheet

thinkphp上传至服务器后PhpExcel导入导出的若干问题

在将tp5项目上传到服务器后,原来的系统有部分功能无法实现,在批量到如时报错 mkdir(): Device or resource: 查看了一下这是权限的问题,因此打开服务器中的项目,将controller控制器中的导入代码的文件位置进行修改: 这里改为你自己定义的文件夹位置. 点开文件夹属性->安全 设置此文件夹可以让所有用户读取和写入. 设置完成再次点击导入,发现报错: Warning: "continue" targeting switch is equivalent t

PHP导入导出excel表格图片(转)

写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了.基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件.优

PHP导入导出Excel方法

看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也 有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用 过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了.因为采用的是拿来主义,记不住.原文地址:http://xinsync.xju.edu.cn/index.p

PHP使用PHPEXCEL导入Excel

下载PHPEXCEL 后放到项目里. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 public function InExcel() {     //设定缓

PHP导入导出Excel方法小结

基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件.优点:简单.缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序.2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式. 如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:$yourS