PHPExcel是个很强大的类库,以前只使用过它生成Excel文件,非常方便。

今天接到个项目要读取Excel的文件,以前也做过Excel转换写入数据库的工作, 

不过相对简单一些,是转换成CSV格式再进行解析的。

首先下载PHPExcel类库。http://phpexcel.codeplex.com/

包含PHPExcel类库文件,如果不能确定文件类型的话可以使用PHPExcel_IOFactory::identify方法返回文件的类型,传递给该函数一个文件名就可以。

然后根据返回的文件类型创建该类型的读取对象,进行文件的load。

之后就可以进行数据的读取了,
具体代码如下所示:

  • <?php
  •     require_once(‘include/common.inc.php’);
  •     require_once(ROOTPATH . ‘include/phpExcel/PHPExcel/IOFactory.php’);
  •     
  •     $filePath = ‘./file/xls/110713.xls’; 
  •     
  •     $fileType = PHPExcel_IOFactory::identify($filePath); //文件名自动判断文件类型
  •     $objReader = PHPExcel_IOFactory::createReader($fileType);
  •     $objPHPExcel = $objReader->load($filePath);
  •     
  •     $currentSheet = $objPHPExcel->getSheet(0); //第一个工作簿
  •     $allRow = $currentSheet->getHighestRow(); //行数
  •     $output = array();
  •     $preType = ”;
  •     
  •     $qh = $currentSheet->getCell(‘A4′)->getValue();
  •     //按照文件格式从第7行开始循环读取数据
  •     for($currentRow = 7;$currentRow<=$allRow;$currentRow++){ 
  •         //判断每一行的B列是否为有效的序号,如果为空或者小于之前的序号则结束
  •         $xh = (int)$currentSheet->getCell(‘B’.$currentRow)->getValue();
  •         if(empty($xh))break;
  •         
  •         $tmpType = (string)$currentSheet->getCell(‘C’.$currentRow)->getValue(); //赛事类型
  •         if(!empty($tmpType))$preType = $tmpType;
  •         $output[$xh][‘type’] = $preType;
  •         $output[$xh][‘master’] = $currentSheet->getCell(‘F’.$currentRow)->getValue(); //主队
  •         $output[$xh][‘guest’] = $currentSheet->getCell(‘H’.$currentRow)->getValue(); //客队    
  •     }
  •     
  •     //从当前行开始往下循环,取出第一个不为空的行
  •     for( ; ; $currentRow++){
  •         $xh = (int)$currentSheet->getCell(‘B’.$currentRow)->getValue();
  •         if(!empty($xh))break;
  •     }
  •     
  •     for( ; $currentRow <= $allRow; $currentRow++){
  •         $xh = (int)$currentSheet->getCell(‘B’.$currentRow)->getValue();
  •         if(empty($xh))break;
  •         
  •         $output[$xh][‘rq’] = $currentSheet->getCell(‘I’.$currentRow)->getValue();
  •     }
  •     header(“content-type:text/html; charset=utf-8″);
  •     
  •     echo ‘期号:’ . $qh . “\n\n”;
  •     if(!empty($output)){
  •         printf(“%-5s\t%-15s\t%-40s\t%-40s\t%-5s\n”, ‘序号’, ‘赛事类型’, ‘主队’, ‘客队’, ‘让球值’);
  •         foreach($output as $key => $row){
  •             $format = “%-5d\t%-15s\t%-40s\t%-40s\t%-5s\n”;
  •             printf($format, $key, $row[‘type’], $row[‘master’], $row[‘guest’], $row[‘rq’]);
  •         }
  •     }
  • ?>
  • /*
    * 将excel转换为数组 by aibhsc
    * */
    require(ROOT_PATH . 'includes/PHPExcel.php');//引入PHP EXCEL类
    function format_excel2array($filePath='',$sheet=0){
            if(empty($filePath) or !file_exists($filePath)){die('file not exists');}
            $PHPReader = new PHPExcel_Reader_Excel2007();        //建立reader对象
            if(!$PHPReader->canRead($filePath)){
                    $PHPReader = new PHPExcel_Reader_Excel5();
                    if(!$PHPReader->canRead($filePath)){
                            echo 'no Excel';
                            return ;
                    }
            }
            $PHPExcel = $PHPReader->load($filePath);        //建立excel对象
            $currentSheet = $PHPExcel->getSheet($sheet);        //**读取excel文件中的指定工作表*/
            $allColumn = $currentSheet->getHighestColumn();        //**取得最大的列号*/
            $allRow = $currentSheet->getHighestRow();        //**取得一共有多少行*/
            $data = array();
            for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){        //循环读取每个单元格的内容。注意行从1开始,列从A开始
                    for($colIndex='A';$colIndex<=$allColumn;$colIndex++){
                            $addr = $colIndex.$rowIndex;
                            $cell = $currentSheet->getCell($addr)->getValue();
                            if($cell instanceof PHPExcel_RichText){ //富文本转换字符串
                                    $cell = $cell->__toString();
                            }
                            $data[$rowIndex][$colIndex] = $cell;
                    }
            }
            return $data;
    }
     
     
    使用方法:
                            $filePath = ROOT_PATH.'data/diamondStock.xlsx';        //钻石库存文件
                            $data = format_excel2array($filePath);
                            print_r($data);die;
     
    输出结果示例:
     
    Array
    (
        [1] => Array
            (
                [A] => 商品编号
                [B] => 商品名称
                [C] => 总重量
                [D] => 进货价格
                [E] => 销售价格
                [F] => 4C备注
            )
     
        [2] => Array
            (
                [A] => 10001
                [B] => GIA-2156685995
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [3] => Array
            (
                [A] => 10002
                [B] => GIA-2156685996
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [4] => Array
            (
                [A] => 10003
                [B] => GIA-2156685997
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [5] => Array
            (
                [A] => 10004
                [B] => GIA-2156685998
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [6] => Array
            (
                [A] => 10005
                [B] => GIA-2156685999
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [7] => Array
            (
                [A] => 10006
                [B] => GIA-2156686000
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [8] => Array
            (
                [A] => 10007
                [B] => GIA-2156686001
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [9] => Array
            (
                [A] => 10008
                [B] => GIA-2156686002
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [10] => Array
            (
                [A] => 10009
                [B] => GIA-2156686003
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [11] => Array
            (
                [A] => 10010
                [B] => GIA-2156686004
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [12] => Array
            (
                [A] => 10011
                [B] => GIA-2156686005
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [13] => Array
            (
                [A] => 10012
                [B] => GIA-2156686006
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
        [14] => Array
            (
                [A] => 10013
                [B] => GIA-2156686007
                [C] => 0.7
                [D] => 1760
                [E] => 1848
                [F] => G色、0.7ct、SI1、FR
            )
     
    )
    

      

  • 相关文章:

    • 2021-11-23
    • 2021-07-11
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2021-11-20
    猜你喜欢
    • 2021-10-29
    • 2022-12-23
    • 2021-07-27
    • 2021-07-06
    • 2021-12-20
    相关资源
    相似解决方案