我正在用PhpSpreadsheet创建一个包含2个工作表的Excel。第一个是数据的选择和插入,第二个是提供第一页组合的选项列表,直到现在一切工作都很好,但是我遇到了一个案例,我不知道是否有可能做吧。
在数据库中,我有一个名为 Base_type 的表,该表包含 Id 和 Name
我还有一个名为 Type_Base_List 的表,它包含 Id , Id_Type_Base 和 Id_List
最后,我有一个 Model 表,其中包含 Id , Name 和 Id_Type_Base
有了这个,我得到了一个结果,当用户选择一个特定的模型时,我可以通过该ID获得与相关列表的关联(该模型具有base_type_id,并且在表base_list_type中,我具有与base_type_id关联的所有list_id)
此逻辑在我的应用程序中效果很好,但是我不知道是否有可能在生成的Excel中应用该逻辑。我的意思是,一旦该人选择了一个值,然后转到单元格A1(即模型),则在B1中,应列出与该模型关联的所有LISTS(具有上述逻辑)
要在excel中生成选项,
//1 SHEET
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet(0);
$sheet->setTitle('Actividades');
$sheet->getColumnDimension('A')->setWidth(15);
$sheet->getColumnDimension('B')->setWidth(30);
$sheet->setCellValue('A1', 'Model');
$sheet->setCellValue('B1', 'List');
//2 sheet
$spreadsheet->createSheet(1);
$spreadsheet->setActiveSheetIndex(1);
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Combos');
//Models
$sheet->mergeCells('A1:B1');
$sheet->setCellValue('A1', "Models");
$i = 2;
foreach ($models as &$model) {
$sheet->setCellValue('A'.$i, $model['name']);
$sheet->setCellValue('B'.$i, $model['id']);
$i++;
}
$sheet->mergeCells('C1:D1');
$sheet->setCellValue('C1', "Lists");
$i = 2;
foreach ($lists as &$list) {
$sheet->setCellValue('C'.$i, $list['name']);
$sheet->setCellValue('D'.$i, $list['id']);
$i++;
}
$spreadsheet->setActiveSheetIndex(0);
$sheet = $spreadsheet->getActiveSheet();
$i = 2;
while ($i <= $minimoListas + 2) {
//Options Models
$objValidation = $sheet->getCell("A".$i)->getDataValidation();
$objValidation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);
$objValidation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('error entrada');
$objValidation->setError('Valor no es válido');
$objValidation->setPromptTitle('Select Model');
$objValidation->setFormula1('Combos!$A$2:$A$'.$countUnidades);
//Options List
$objValidation = $sheet->getCell("B".$i)->getDataValidation();
$objValidation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);
$objValidation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('error entrada');
$objValidation->setError('Valor no es válido');
$objValidation->setPromptTitle('Select List');
$objValidation->setFormula1('Combos!$C$2:$C$'.$countListas);
$i++;
}