Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自不同工作表的设置公式PHPExcel未采用正确的值_Php_Phpexcel - Fatal编程技术网

来自不同工作表的设置公式PHPExcel未采用正确的值

来自不同工作表的设置公式PHPExcel未采用正确的值,php,phpexcel,Php,Phpexcel,我需要使用单独的工作表在excel中创建一个下拉列表 // Creating original sheet. $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); // Creating auxiliary sheet for drop down data. $objWorkSheet = $objPHPExcel->createSheet(0);

我需要使用单独的工作表在excel中创建一个下拉列表

    // Creating original sheet.
    $objPHPExcel = new PHPExcel();


    $objPHPExcel->setActiveSheetIndex(0);
    // Creating auxiliary sheet for drop down data.
    $objWorkSheet = $objPHPExcel->createSheet(0);
    $objWorkSheet->setTitle("autofill");
    $objWorkSheet->setCellValue('A1', 2)
                 ->setCellValue('A2', 3);


    $objValidation = $objPHPExcel->getActiveSheet()->getCell('B2')->getDataValidation();
    $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
    $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
    $objValidation->setAllowBlank(false);
    $objValidation->setShowInputMessage(true);
    $objValidation->setShowErrorMessage(true);
    $objValidation->setShowDropDown(true);
    $objValidation->setErrorTitle('Input error');
    $objValidation->setError('Value is not in list.');
    $objValidation->setPromptTitle('Pick from list');
    $objValidation->setPrompt('Please pick a value from the drop-down list.');
    // Setting the formula in original sheet.
    $objValidation->setFormula1("='autofill'!$A$1:$A$2");
我在B2单元格中得到一个下拉列表,但只有一个值0(如图所示)

谁能指出代码中的错误吗?

你好,伙计

我认为您的代码的问题在于这行代码:

$objValidation->setFormula1("='autofill'!$A$1:$A$2");
试着把它改成

$objValidation->setFormula1('=\'autofill\'!$A$1:$A$2');
这是因为当您使用双引号
PHP
时,将
$A
视为变量

祝你好运,如果这修复了你的代码,请告诉我

编辑

事实上,我现在确实测试了你的代码,看起来很有效。如果您不按照我告诉您的那样更改代码,那么只会有一个通知,但代码仍然有效。我看到两张工作表(自动填充和工作表),第二张在B2处有下拉列表,值为2,3(来自自动填充工作表)。因此,请尝试在代码的其他部分搜索问题,或者与我们共享,我们可以看到问题出在哪里

我测试的代码片段(99%与您的相同):

$objPHPExcel = new \PHPExcel();

$objPHPExcel->setActiveSheetIndex(0);
// Creating auxiliary sheet for drop down data.
$objWorkSheet = $objPHPExcel->createSheet(0);
$objWorkSheet->setTitle("autofill");
$objWorkSheet->setCellValue('A1', 2)
        ->setCellValue('A2', 3);

$objValidation = $objPHPExcel->getActiveSheet()->getCell('B2')->getDataValidation();
$objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_LIST);
$objValidation->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION);
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Value is not in list.');
$objValidation->setPromptTitle('Pick from list');
$objValidation->setPrompt('Please pick a value from the drop-down list.');
// Setting the formula in original sheet.
$objValidation->setFormula1('=\'autofill\'!$A$1:$A$2');

$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('test.xlsx');

我使用的是phpexcel的2.1版本。只有最后几行代码的区别如下:$fileName=Slug($options[“title”])。“.xls”;标题('Content-Type:application/vnd.ms-excel');标题('Content-Disposition:attachment;filename='。$filename);标头('Cache-Control:max age=0')$objWriter=new PHPExcel_Writer_Excel5($objPHPExcel);ob_end_clean()$objWriter->save命令php://output');@johndoe我的版本是
version 1.8.0,2014-03-02
尝试将文件保存为
xlsx
,并使用
PHPExcel\u Writer\u Excel2007
,这可能会解决您的问题problem@johndoe我使用
PHPExcel\u Writer\u Excel5
进行了测试,得到了您的问题的再现。问题似乎来自
PHPExcel\u Writer\u Excel5
尝试
PHPExcel\u Writer\u Excel2007
不要将其视为公式;就像单元格引用一样:
$objValidation->setFormula1('autofill!$a$1:$a$2')尤其是当您不需要引用工作表名称p.S时。PHPExcel的2.1版不存在;最新的产品版本是1.8。1@MarkBaker这使它起作用了。@当列表中有太多条目(比如20000条)时,MarkBaker下拉列表会中断,只显示一个零。有没有办法纠正这个问题?不太可能,因为即使是MS Excel也有限制:根据您使用的MS Excel版本,限制范围从1000条到32768条