【问题标题】:PHPExcel toArray skip first header rowPHPExcel toArray 跳过第一行
【发布时间】:2015-06-09 23:18:40
【问题描述】:

我正在将一个 excel 文件上传到网站并对其进行处理以供数据库使用。

我正在使用toArray() 函数来获取 php 数组中的所有行。

但我想跳过第一行(标题行)。其余行将存储在数组中。

如何跳过第一行。

注意:我不能使用rangeToArray() 函数,因为没有固定的范围来将行放入数组中。它是动态的。我想要的只是获取除第一行之外的所有行。

【问题讨论】:

    标签: php phpexcel phpexcelreader


    【解决方案1】:

    Eko 解决了一半的问题,你可以使用 rangeToArray();但你根本不需要使用循环:

    $highestRow = $sheet->getHighestRow(); 
    $highestColumn = $sheet->getHighestColumn();
    
    $sheetData = $sheet->rangeToArray(
        'A2:' . $highestColumn . $highestRow,
        NULL,TRUE,FALSE
    );
    

    或者,使用toArray(),然后只使用unset返回数组中的第一个元素

    【讨论】:

    • 是的,谢谢@Mark Ba​​ker,你明白了我失去了它。非常感谢。 :D 顺便说一句,我忘记了一些东西,我创建它是因为我需要行和列的灵活性来获取数据。呵呵...您的答案可能是该问题的答案。 (y)
    【解决方案2】:

    你可以使用array_shift这个来实现:

    $toArray = $worksheet->toArray() 
    array_shift($toArray);
    

    【讨论】:

      【解决方案3】:

      我创建了一个函数来使用 PHPExcel 读取 excel 文件,如下所示:

      function Read_Excel($fname=null,$isheet=0,$irow=1,$icol='A'){       
              $inputFileName = $fname;        
      
              try {
                  $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
                  $objReader = PHPExcel_IOFactory::createReader($inputFileType);
                  $objPHPExcel = $objReader->load($inputFileName);
              } catch(Exception $e) {
                  die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
              }
      
              $sheet = $objPHPExcel->getSheet(intval($isheet)); 
              $highestRow = $sheet->getHighestRow(); 
              $highestColumn = $sheet->getHighestColumn();
      
              for ($row = intval($irow); $row <= $highestRow; $row++){ 
                  //  Read a row of data into an array
                  $rowData = $sheet->rangeToArray($icol . $row . ':' . $highestColumn . $row,NULL,TRUE,FALSE);
                  $rec_tbl[] = $rowData[0];
              }
              return $rec_tbl;
          }
      

      你只需要改变函数参数中的$irow=1就可以得到你想要的一行。

      【讨论】:

      • 是的。我首先想到了这个。但是,没有任何“无循环”的方法可以跳过它吗?
      • 虽然和我之前创建的一样,但我没有选择不做你说的“无环”方式。我之前尝试过,但没有找到不使用“loopless”的方法......
      • 顺便说一句,如果你得到一个不使用“无环”方式的好解决方案,请告诉我...... :)
      • 当然。我会通知你的。
      猜你喜欢
      • 2014-06-07
      • 2013-08-17
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多