zoukankan      html  css  js  c++  java
  • PHPExcel讀取excel數據

    require_once 'PHPExcel.php'; 
    $PHPReader = new PHPExcel_Reader_Excel2007(); 
    $filePath = 'wjyl.xlsx'; 
    if(!$PHPReader->canRead($filePath)){
        $PHPReader = new PHPExcel_Reader_Excel5();//讀取舊版本
    }  
    $PHPExcel = $PHPReader->load($filePath);//讀取Excel文件  
    $sheetCount = $PHPExcel->getSheetCount();//獲取工作表的數目
    for($s = 0; $s < $sheetCount; $s++){
        echo '<b>這是表'.$s."</b><br />";
        $currentSheet = $PHPExcel->getSheet($s); //讀取excel工作表
         $allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
         $allRow = $currentSheet->getHighestRow();//取得一共有多少行
         for($currentRow = 2; $currentRow < $allRow; $currentRow++){
            for($currentColumn= 'A';$currentColumn < $allColumn; $currentColumn++){
                $val = $currentSheet->getCell($currentColumn.$currentRow)->getValue();
                echo $val."&nbsp;&nbsp;&nbsp;";
            }
            echo "<br />";     
        }
    }
    echo 'Well Done!!!'; exit; /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/ //
    echo iconv('utf-8','gb2312', $val);

    當excel表的總列數超過了26的時候,也就是超過了Z的時候,再繼續增加就上升為AA,AB,AC......AZ格式,在這種情況下,上面代碼在列循環只會循環第一個A。

    了解字母比較:

    字母的比較,實際上是字母在ASCII表中所對應的10進制數字大小的比較,例如A 的 ASCII表中十進制對應數字為65,Z的為90;

    echo ord('A');//65
    echo ord('Z');//90

    比較規則:

    A與AB比較,首先,A與AB中的A比較,由於相等,則跳過A,繼續與B比較,得出

    echo 'A' < 'AB' ? 1 : 0;//1

    A與AA比較,先進行字母逐個比較,當每個都相等的情況下,最後進行字符串的長度對比,得出

    echo 'A' < 'AA' ? 1 : 0;//1

    A與BA比較,首先A與B比較,A小於B,得出結果

    echo 'A' < 'BA' ? 1 : 0;//1

    得出結果:
    例如上面最後一列為AP,A首先會與allRow中的第一個字母進行比較,相同字母跳過,再與第二個字母比較,A<P,進入循環,執行完第一次代碼之後,列數增加,此時為B與AP比較,由於B>A,所以第一個字母判斷就不成立,退出循環。

    解決辦法:

    $ColumnArr = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP');
    for($currentRow = 2;$currentRow <= $allRow;$currentRow++){ 
        for($c_Column= 0;$c_Column < count($ColumnArr); $c_Column++){
            $val = $currentSheet->getCell($ColumnArr[$c_Column].$currentRow)->getValue();
            echo $val."&nbsp;&nbsp;&nbsp;";
        } 
        echo "<br />"; 
     }

    解決辦法的原理就是能夠確保列的循環能夠順利的進行,上面固定列出來數組只是方便理解,具體操作可以對$allCloumn進行處理動態獲取列的相關數據。

  • 相关阅读:
    Day1_Python基础
    选择排序(java版)
    冒泡排序(java版)
    手写数据库连接池(动态代理)
    JDBC增删查改(使用配置文件)
    JDBC demo
    JSP入门&会话技术
    response实现验证码图片
    android 定制自己的日志工具
    服务的最佳实践——后台执行的定时任务
  • 原文地址:https://www.cnblogs.com/helin/p/3214625.html
Copyright © 2011-2022 走看看