PHPExcel getCellCollection 始终指向我 excel 中的最后一张表

PHPExcel getCellCollection is always points to lastsheet in my excel

我在 codeigniter 中使用 PHPExcel 插件 我的要求是我有一个包含多张纸的 excel 文件

通过使用下面的代码,我试图从 excel 表中获取一些数据 在使用 getAllSheets 循环时,getCellCollection 总是指向最后一个 only

举个例子

Array ( [0] => Array ( [timing] => Array ( [0] => 10:30 PM [1] => 7:30 AM ) [header] => Array ( [4] => Array ( [D] => 2017-03-27 [E] => 2017-03-28 [F] => 2017-03-29 [G] => 2017-03-30 [H] => 2017-03-31 ) ) [arr_data] => Array ( [5] => Array ( [A] => Damojipurapu Venkata Raghavendra Praveen [B] => Array ( [0] => Railway new colony [1] => 9052932938 ) [C] => 08:50 PM [G] => OFF ) [6] => Array ( [A] => Seerapu Venkata Rao [B] => Array ( [0] => Maharanipeta [1] => 9701964583 ) [C] => 09:00 PM ) [7] => Array ( [A] => Challa Vinod Kumar [B] => Array ( [0] => Chinna Walter [1] => 9963463234 ) [C] => 09:10 PM [D] => 6:00AM [E] => OFF ) [8] => Array ( [A] => Satish Kumar [B] => Array ( [0] => Maruthi Paradise, Opp Vilas Rest,PM palem [1] => 9731347726 ) [C] => 09:20 PM ) [9] => Array ( [A] => Bandi Saketh Reddy [B] => Array ( [0] => Madhurwada [1] => 8501999751 ) [C] => 09:40 PM [H] => OFF ) [10] => Array ( [A] => D Selvaa Murugan [B] => Array ( [0] => Car Shed Madhurwada [1] => 9043287087 ) [C] => 09:50 PM ) ) ) [1] => Array ( [timing] => Array ( [0] => 10:30 PM [1] => 7:30 AM ) [header] => Array ( [4] => Array ( [D] => 2017-03-27 [E] => 2017-03-28 [F] => 2017-03-29 [G] => 2017-03-30 [H] => 2017-03-31 ) ) [arr_data] => Array ( [5] => Array ( [A] => Damojipurapu Venkata Raghavendra Praveen [B] => Array ( [0] => Railway new colony [1] => 9052932938 ) [C] => 08:50 PM [G] => OFF ) [6] => Array ( [A] => Seerapu Venkata Rao [B] => Array ( [0] => Maharanipeta [1] => 9701964583 ) [C] => 09:00 PM ) [7] => Array ( [A] => Challa Vinod Kumar [B] => Array ( [0] => Chinna Walter [1] => 9963463234 ) [C] => 09:10 PM [D] => 6:00AM [E] => OFF ) [8] => Array ( [A] => Satish Kumar [B] => Array ( [0] => Maruthi Paradise, Opp Vilas Rest,PM palem [1] => 9731347726 ) [C] => 09:20 PM ) [9] => Array ( [A] => Bandi Saketh Reddy [B] => Array ( [0] => Madhurwada [1] => 8501999751 ) [C] => 09:40 PM [H] => OFF ) [10] => Array ( [A] => D Selvaa Murugan [B] => Array ( [0] => Car Shed Madhurwada [1] => 9043287087 ) [C] => 09:50 PM ) ) ) )

我的密码是

try {
                $fileType = PHPExcel_IOFactory::identify($file["tmp_name"]);
                $objReader = PHPExcel_IOFactory::createReader($fileType);
                $objPHPExcel = $objReader->load($file["tmp_name"]);
                $all_data=array();
                foreach ($objPHPExcel->getAllSheets() as $sheet) {
                    //echo $sheet->getTitle()."<br>";
                    $cell_collection = $sheet->getCellCollection();
                    //print_r($cell_collection);
                    foreach ($cell_collection as $cell) {
                        $c=$objPHPExcel->getActiveSheet()->getCell($cell);
                        $column = $c->getColumn();
                        $row = $c->getRow();
                        $data_value = $c->getValue();
                        if(strstr($data_value,'=')==true)
                        {
                            $data_value = $c->getOldCalculatedValue();
                        }
                        if ($row == 3) {
                            if(count($data_value)>0){
                                $a = explode("Shift: ",$data_value);
                                $data["timing"] =array_map('trim',explode("-",$a[1]));
                            }
                        }else if ($row == 4){
                            if($column!='A'&&$column!='B'&&$column!='C'){
                                if (PHPExcel_Shared_Date::isDateTime($c)) {
                                    $data_value = PHPExcel_Shared_Date::ExcelToPHPObject($c->getValue())->format('Y-m-d');
                                }
                                if(count($data_value)>0)
                                    $data["header"][$row][$column] = $data_value;
                            }

                        }else if ($row > 4){
                            if($column=='B'){
                                if(count($data_value)>0)
                                $data_value=array_map('trim',explode("/",$data_value));
                            }
                            if($column=='C'){
                                if (PHPExcel_Shared_Date::isDateTime($c)) {
                                    $data_value = PHPExcel_Shared_Date::ExcelToPHPObject($c->getValue())->format('h:i A');
                                }
                            }
                            if(count($data_value)>0)
                            $data["arr_data"][$row][$column] = $data_value;
                        }
                    }
                    array_push($all_data, $data);
                    $data=array();

                }
                //echo "<pre>";
                print_r($all_data);
                exit;
            }catch (Exception $ex) {}

谢谢, 我找到了解决方案

实际上我需要获取数据 $sheet 而不是 $objPHPExcel->getActiveSheet(), 这样做会导致总是从我们上次保存 excel 文件的 sheet 读取数据, 我只是改变这一行

$c=$objPHPExcel->getActiveSheet()->getCell($cell);

$c=$sheet->getCell($cell);

那我就修好了

再次感谢大家