【问题标题】:Skip First Row in PHPSpreadsheet Import在 PHPSpreadsheet 导入中跳过第一行
【发布时间】:2020-11-25 01:49:38
【问题描述】:

刚开始使用 phpspreadsheet。我想弄清楚如何在上传时跳过我的 excel 文件中的标题行。

require '../vendor/autoload.php';
if (pathinfo($_FILES['upexcel']['name'], PATHINFO_EXTENSION) == 'csv') {
  $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
} else {
  $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
}
$spreadsheet = $reader->load($_FILES['upexcel']['tmp_name']);

$worksheet = $spreadsheet->getActiveSheet();
$sql = "INSERT INTO `testCommission` (`One`, `two`, `three`, `four`, `five`, `six`, `seven`) VALUES (?, ?, ?, ?, ?, ?, ?)";
foreach ($worksheet->getRowIterator() as $row) {
  // Fetch data
  $cellIterator = $row->getCellIterator();
  $cellIterator->setIterateOnlyExistingCells(false);
  $data = [];
  foreach ($cellIterator as $cell) {
    $data[] = $cell->getValue();
  }

我可以用上面的脚本做些什么来实现这一点?

【问题讨论】:

    标签: php mysql phpspreadsheet


    【解决方案1】:

    您需要检测,当它是第一行时,像这样的二进制变量会有所帮助

    <?php
    require '../vendor/autoload.php';
    if (pathinfo($_FILES['upexcel']['name'], PATHINFO_EXTENSION) == 'csv') {
      $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
    } else {
      $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
    }
    $spreadsheet = $reader->load($_FILES['upexcel']['tmp_name']);
    
    $worksheet = $spreadsheet->getActiveSheet();
    $sql = "INSERT INTO `testCommission` (`One`, `two`, `three`, `four`, `five`, `six`, `seven`) VALUES (?, ?, ?, ?, ?, ?, ?)";
    $isheader = 0;
    foreach ($worksheet->getRowIterator() as $row) {
      // Fetch data
      if($isheader > 0) {
          $cellIterator = $row->getCellIterator();
          $cellIterator->setIterateOnlyExistingCells(false);
          $data = [];
          foreach ($cellIterator as $cell) {
              $data[] = $cell->getValue();
          }
      } else 
      { $isheader = 1; }
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      使用过滤器类。 请参阅文档: https://phpspreadsheet.readthedocs.io/en/latest/topics/reading-files/#reading-only-specific-columns-and-rows-from-a-file-read-filters

      别忘了自动加载:

      require_once ( 'vendor/autoload.php' );
      

      创建过滤器:

      class FirstRowFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
      {
          public function readCell($column, $row, $worksheetName = '') {
              //  Return true for rows after first row
              return $row > 0;
          }
      }
      

      适用于读者:

      $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
      
      $filterRow = new FirstRowFilter();
      
      $reader->setReadFilter($filterRow);
      

      加载文件:

      $spreadsheet = $reader->load($file);
      

      阅读器只会加载指定行之后的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 2017-09-21
        • 1970-01-01
        • 2016-08-30
        • 2021-02-04
        • 2014-07-29
        • 2013-02-18
        相关资源
        最近更新 更多