使用PHPExcel将数组中的数据转换为数据验证列表


Converting data from an array into a data validation list using PHPExcel

我有一个一维数组,它可以包含更多的50个元素,我想知道一种将其添加到excel单元格中的方法。我使用的是PHPExcel,我知道必须使用PHPExcel_Cell_DataValidation::TYPE_LIST才能做到这一点,但我没有找到将数组元素传递到excel单元格的方法。事实上,我想要的是计算这个数组中有多少元素,并在A列的单元格中设置与元素数量相同的下拉列表(数据验证列表)。

有人能给我什么主意吗?

EDIT-进一步解释问题:我有一个块名称列表,我正在尝试创建一个模板文件,用户可以下载该文件来更新新块的数据。如果他添加了一个不同的块名称,它将创建一个新的块,而不是更新,这就是为什么我想在工作表中"a"列的每个单元格中使用数据验证列表。通过这种方式,用户可以选择已经存在的块名(他不会在写块名时混淆)。此外,他不需要将所有块都放在单元格中,因为他可以用50多个块更新列表中2个块的数据。(如果他有所有的块填充单元格,当他上传模板时,他也会上传他留下的空块的数据……我想现在更容易理解我的问题了。

我刚刚解决了它。我发现了问题:

    $blocksList = implode (", ", $blockNames);
    $objPHPExcel = new PHPExcel();
    $objPHPExcel->getProperties()->setCreator("lalala SAS")
                ->setTitle("Bulk Upload Template");
    //Data Validation list
    $objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')->getDataValidation();
    $objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_LIST);
    $objValidation->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION);
    $objValidation->setAllowBlank(true);
    $objValidation->setShowDropDown(true);
    $objValidation->setErrorTitle('Input error');
    $objValidation->setError('Value is not in list');
    $objValidation->setFormula1('"'.$blocksList.'"');

问题是我的$blocksKist太大了,excel公式只支持255个字符。这样,我将把我的$blocksList添加到另一张表中,并从中读取。