来自不同工作表的设置公式PHPExcel未采用正确的值
我需要使用单独的工作表在excel中创建一个下拉列表来自不同工作表的设置公式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);
// 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条