• php 的 PHPExcel1.8.0 使用教程


    PHPExcel是用来操作Office Excel文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。
     
    一、下载PHPExcel
    http://phpexcel.codeplex.com/
    
    如:PHPExcel_1.8.0_doc.zip
     
    二、使用PHPExcel的要求
    PHP版本高于5.2.0
    开启php_zip扩展
    开启php_xml扩展
    开启php_gd2扩展
    
    三、解压zip,把里面的classes里的文件拷贝一份放入phpexcel文件夹中。
     
    四、PHPExcel中常用方法
    //引入PHPExcel文件
    require './phpexcel/PHPExcel.php';
    
    //创建PHPExcel对象
    $obj = new PHPExcel();
    
    //写入excel操作
    
    //创建excel写入对象
    //第二个参数可以写'excel2007'
    $writer = PHPExcel_IOFactory::createWriter($obj, 'Excel5');
    //或如下方式
    $writer = new PHPExcel_Writer_Excel5($obj);
    
    //保存文件到本地
    $writer->save('1.xls');
    
    //浏览器输出
    header('Content-Type: application/vnd.ms-execl');
    header('Content-Disposition: attachment;filename="文件名.xls"');
    header('Cache-Control: max-age=0');
    $writer->save('php://output');
    
    //文件名乱码的解决
    $filename = iconv('utf-8', 'gbk', '中文.xls');
    $writer->save($filename);
    
    //内容乱码问题
    使用浏览器输出时,header头部加上ob_end_clean();
    
    //操作工作表(worksheet)
    
    //创建工作表方法一
    $sheet = new PHPExcel_Worksheet($obj, 'new sheet');
    $obj->addSheet($sheet);
    
    //创建工作表方法二
    $obj->createSheet();
    
    //设置当前工作表
    $obj->setActiveSheetIndex(0);
    
    //得到当前工作表对象
    $curSheet = $obj->getActiveSheet();
    
    //往工作表中插入数据
    
    //设置单元格的值
    $curSheet->setCellValue('A1', '10');
    $curSheet->setCellValue('A2', '20');
    $curSheet->setCellValue('A3', '=sum(A1:A2)');
    
    //设置样式
    //加粗
    $curSheet->getStyle('A1')->getFont()->setBold(true);
    //斜体
    $curSheet->getStyle('A1')->getFont()->setItalic(true);
    //字体颜色
    $curSheet->getStyle('A1')->getFont()->
    setColor(new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_DARKGREEN));
    //字体
    $curSheet->getStyle('A1')->getFont()->setName('宋体');
    //字体大小
    $curSheet->getStyle('A1')->getFont()->setSize(20);
    //设置列宽
    $curSheet->getColumnDimension('A')->setWidth(20);
    $curSheet->getColumnDimension('A')->setAutoSize(true);
    //设置行高
    $curSheet->getRowDimension('1')->setRowHeight(20);
    //设置边框
    $curSheet->getStyle('A1')->getBorders()->getTop()
    ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    //设置边框颜色
    $curSheet->getStyle('A1')->getBorders()->getTop()->getColor()->setARGB('FF336600');
    //设置填充色
    $curSheet->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    $curSheet->getStyle('A1')->getFill()->getStartColor()->setARGB('FFFF0000');
    
    //单元格的合并
    $curSheet->mergeCells('A1:A3');
    //多行多列合并
    $curSheet->mergeCellsByColumnAndRow($col1,$row1,$col2,$row2);
    //插入一行(在before之前插入$rowNums行)
    $curSheet->insertNewRowBefore($before=1, $rowNums=1);
    //删除行(从row开始删除$rowNums行)
    $curSheet->removeRow($row=1,$rowNums=1);
    //插入列(在before之前添加$colNums列)
    $curSheet->insertNewColumnBefore($before='A', $colNums=1);
    //删除列(从col开始删除$colNums列)
    $curSheet->removeColumn($col='A', $colNums);
    
    //插入图片
    1、创建图片操作对象
    $img = new PHPExcel_Worksheet_Drawing();
    2、设置图片路径
    $img->setPath(路径);
    3、设置图片宽高
    $img->setWidth();
    $img->setHeight();
    4、设置图片插入位置
    $img->setCoordinates('A1');
    5、设置图片偏移量
    $img->setOffsetX(100);
    6、设置图片倾斜
    $img->setRotation(25);
    7、添加到工作表
    $img->setWorksheet($curSheet);
    
    //读取excel操作
    
    //创建excel读对象
    $reader = PHPExcel_IOFactory::createReader('Excel5');
    $reader = new PHPExcel_Reader_Excel5();
    //得到excel操作对象
    $excel = PHPExcel_IOFactory::load(excel路径);
    $excel = $reader->load(excel路径);
    
    //获取表的相应数据
    
    //获取工作表数量
    $excel->getSheetCount();
    
    //获取工作表名
    $excel->getSheetNames();
    
    //根据表名切换当前工作表
    $excel->setActiveSheetIndexByName();
    
    //获取整个内容返回数组
    $excel->getActiveSheet()->toArray();
    
    //通过reader对象获取excel表的信息
    $reader->listWorkSheetInfo(路径);
    $reader->listWorkSheetNames(路径);
    
    //获取当前工作表最大行数
    $excel->getActiveSheet()->getHighestRow();
    //获取当前工作表最大列数
    $excel->getActiveSheet()->getHighestColumn();
    
    //获取单个单元格内容
    $curSheet->getCell('A1')->getValue();
    
    五、如何循环读取excel中数据
    <?php
    require './phpexcel/PHPExcel.php';
    
    $reader = PHPExcel_IOFactory::createReader('Excel5');
    $excel = PHPExcel_IOFactory::load('./1.xls');
    $curSheet = $excel->getActiveSheet();
    
    $rows = $curSheet->getHighestRow();
    $cols = $curSheet->getHighestColumn();
    
    $data = array();
    for($i = 1; $i <= $rows; ++$i) {
        $tmp = array();
        for($j = 'A'; $j <= $cols; ++$j) {
            $name = $j . $i;
            $cellData = $curSheet->getCell($name)->getValue();
            $tmp[] = $cellData;
        }
        $data[] = $tmp;
    }
    
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    
    六、如何导入大数据量的excel
    1、为了测试,我们手动的创建一个数据量较大的xls文件
    <?php
    set_time_limit(0);
    require './phpexcel/PHPExcel.php';
    
    $start = microtime(true);
    $excel = new PHPExcel();
    $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
    $curSheet = $excel->getActiveSheet();
    
    $rows = 10000;
    $cols = range('A', 'M');
    
    for($i = 1; $i <= $rows; ++$i) {
        foreach($cols as $col) {
            $cellName = $col . $i;
            $curSheet->setCellValue($cellName, uniqid(mt_rand(), true));
        }
    }
    
    $writer->save('./data.xls');
    $end = microtime(true);
    echo $end - $start;
    
    生成该文件大概花了17秒,大小约为10.2MB。
     
    2、我们创建一个静态页面,用于上传该文件
    <!DOCTYPE HTML>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>导入excel</title>
    </head>
    <body>
        <form action="import.php" method="post" enctype="multipart/form-data">
            xls文件:<input type="file" name="upfile" value="" />
            <input type="submit" value="导入" />
        </form>
    </body>
    </html>
    
    3、通过生成sql语句把它写入到data.sql中,然后调用mysql命令导入sql文件
    <?php
    set_time_limit(60);
    ini_set("memory_limit", "128M");
    
    require './phpexcel/PHPExcel.php';
    
    $start = microtime(true);
    
    $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;  
    $cacheSettings = array();  
    PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
    
    //上传的临时文件
    $upfile = $_FILES['upfile']['tmp_name'];
    $excel = PHPExcel_IOFactory::load($upfile);
    $curSheet = $excel->getActiveSheet();
    
    $db = mysql_connect('127.0.0.1', 'root', '');
    mysql_select_db('test');
    mysql_query('set names utf8');
    
    //sql文件保存路径
    $sqlFile = dirname(__FILE__) . '/data.sql';
    $fp = fopen($sqlFile, 'ab+');
    
    $rows = $curSheet->getHighestRow();
    $cols = $curSheet->getHighestColumn();
    
    //将列名转为列数
    $cols = PHPExcel_Cell::columnIndexFromString($cols);
    
    for($i = 1; $i <= $rows; ++$i) {
        $rowStr = "INSERT INTO `test` VALUES(NULL,";
        for($j = 0; $j < $cols; ++$j) {
    
            //将列数转换为列名
            $cellName = PHPExcel_Cell::stringFromColumnIndex($j) . $i;
            $cellValue = $curSheet->getCell($cellName)->getValue();
            $cellValue = iconv('GBK', 'UTF-8', $cellValue);
            $rowStr .= "'{$cellValue}',";
        }
        $rowStr = rtrim($rowStr, ",") . ");
    ";
        fwrite($fp, $rowStr);
    }
    fclose($fp);
    
    exec('D:ampmysql56inmysql -utest -ptest test < ' . $sqlFile);
    
    $end = microtime(true);
    echo $end - $start;
    
    1万行的xls数据导入数据库,用了36秒左右,当然php的内存还可以调大点。
  • 相关阅读:
    详细的解说public,protected,Default和private的权限问题
    谈谈java中静态变量与静态方法在有继承关系的两个类中调用
    谈谈java中成员变量与成员方法继承的问题
    谈谈嵌套for循环的理解
    JAVA基础细谈
    Css的使用细谈
    Hibernate映射
    hibernate基本
    struts2
    s:form标签
  • 原文地址:https://www.cnblogs.com/jkko123/p/6294571.html
Copyright © 2020-2023  润新知