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

时间:2012-08-20 16:46:53

标签: php phpexcel validation

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

有人可以给我任何想法吗?

编辑 - 解释一下问题:我有一个块名列表,我正在尝试创建一个模板文件,用户可以下载该文件以更新新块的数据。如果他添加了不同的块名称,它将创建一个新块,而不是更新,这就是为什么我想在工作表内的'A'列的每个单元格中使用数据验证列表。这样,用户可以选择已经存在的块名称(他不会混淆写出其名称)。此外,他不需要在单元格中包含所有块,因为他可以更新列表中包含50个以上块的2个块的数据。 (如果他有所有块填充单元格,当他上传模板时,他还会上传他留空的块的数据......我想现在更容易理解我的问题。

1 个答案:

答案 0 :(得分:3)

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

    $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添加到另一张表中并从中读取。