代码之家  ›  专栏  ›  技术社区  ›  Ques

使用phpexcel创建多个工作表时,会出现额外的工作表

  •  3
  • Ques  · 技术社区  · 6 年前

    我正在创建一个包含不同工作表的excel文件。通过迭代创建不同的图纸。但我的迭代会产生一个名为工作表的额外工作表。我的代码是:

            $result = fetch results from database;
            $count = COUNT($result);
            foreach ( $result as $key=>$value){ 
                $objPHPExcel->createSheet($key);   
                $objPHPExcel->getActiveSheet()
                       ->setTitle($value['title']);  
            }
    

    我的数据库有三个结果,它生成了三个工作表,还有一个叫做“工作表”的第四个工作表。

    如果我使用检查条件

    if ($key > 0) {
         execute above code
    }
    else {
         $objPHPExcel->setActiveSheetIndex(0)->setTitle($value['title']);
    }
    

    它工作得很好。为什么会这样?哪里出了错?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Mark Baker    6 年前

    您的代码没有问题。当您使用 $objPHPExcel = new PHPExcel() ,它是用一张名为“工作表”的单页创建的;如果只想创建自己的图纸,请删除该选项

    $objPHPExcel->removeSheetByIndex(0);
    
        2
  •  0
  •   joeljpa JaÍ¢ck    2 年前

    Mark Baker's accepted answer 一如既往地帮助了我,但我想进一步扩展和解释。

    我发现两者 $objPHPExcel = new PHPExcel() $objPHPExcel->createSheet()

    在以下创建多张图纸的示例中:

    $objPHPExcel = new PHPExcel();
    // First sheet
    $objWorkSheet = $objPHPExcel->createSheet(); // NOT NEEDED
    $objWorkSheet = $objPHPExcel->getActiveSheet();
    // code for putting first sheet data
    
    // Second sheet
    $objWorkSheet = $objPHPExcel->createSheet();
    // code for putting second sheet data
    
    // Third, fourth sheets etc
    

    createSheet() 在我发表评论的第一张工作表中不需要,它将创建额外的空白工作表。 new PHPExcel() 已经按照他说的做了我的第一个。

    所以把 $objPHPExcel->removeSheetByIndex(0) 最后,删除它会起作用,但只需删除这条不需要的行就可以以“正确”的方式解决问题,并删除冗余。看起来您的代码大致是这样做的。