不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2017-12-17 18:22  分类:PHP库/系统/微信  编辑

遇到的问题:

我们还是先来看手册是怎么说的:  

It is important to remember that any string participating in an Excel formula is allowed to be maximum 255 characters (not bytes).

当下拉列表的数据来源过长(more than 255 characters)时,该下拉列表会显示不正确(我遇到的情况是:该下拉列表显示了别的正常的下拉列表的数据来源)。

以下是我的解决办法:

<?php
//----------------下拉列表数据来源过长的解决---------------------  

//解决下拉框数据来源字串长度过大:将每个来源字串分解到一个空闲的单元格中
$str_list = "item1,item2,item3,......" ;
$str_len = strlen($str_list);
if ($str_len >= 255) {
    $str_list_arr = explode(',', $str_list); 
    if ($str_list_arr) {
        foreach ($str_list_arr as $i => $d) {
            $c = "P" . ($i+1);
            $activeSheet->setCellValue($c,$d); 
        } 
    }
    $endcell = $c;
    $activeSheet->getColumnDimension('P')->setVisible(false); 
} 

$objValidation2 = $activeSheet->getCell("A1")->getDataValidation(); 
$objValidation2->setType(PHPExcel_Cell_DataValidation::TYPE_LIST) 
               ->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION) 
               ->setAllowBlank(true) 
               ->setShowInputMessage(true)
               ->setShowErrorMessage(true) 
               ->setShowDropDown(true)
               ->setErrorTitle('输入的值有误') 
               ->setError('您输入的值不在下拉框列表内.')
               ->setPromptTitle('下拉选择框')
               ->setPrompt('请从下拉框中选择您需要的值!');
if ($str_len < 255) { 
    $objValidation2->setFormula1('"' . $str_list . '"'); 
} else { 
    $objValidation2->setFormula1("sheet1!P1:{$endcell}");  
}

 

更多问题 及 解决方案 请参考:

http://blog.csdn.net/dreamon007/article/details/7601123