130 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
 | |
| use PhpOffice\PhpSpreadsheet\NamedRange;
 | |
| use PhpOffice\PhpSpreadsheet\Spreadsheet;
 | |
| 
 | |
| require __DIR__ . '/../Header.php';
 | |
| 
 | |
| // Create new Spreadsheet object
 | |
| $helper->log('Create new Spreadsheet object');
 | |
| $spreadsheet = new Spreadsheet();
 | |
| 
 | |
| // Set document properties
 | |
| $helper->log('Set document properties');
 | |
| $spreadsheet->getProperties()
 | |
|     ->setCreator('PHPOffice')
 | |
|     ->setLastModifiedBy('PHPOffice')
 | |
|     ->setTitle('PhpSpreadsheet Test Document')
 | |
|     ->setSubject('PhpSpreadsheet Test Document')
 | |
|     ->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
 | |
|     ->setKeywords('Office PhpSpreadsheet php')
 | |
|     ->setCategory('Test result file');
 | |
| function transpose($value)
 | |
| {
 | |
|     return [$value];
 | |
| }
 | |
| 
 | |
| // Add some data
 | |
| $continentColumn = 'D';
 | |
| $column = 'F';
 | |
| 
 | |
| // Set data for dropdowns
 | |
| $continents = glob(__DIR__ . '/data/continents/*');
 | |
| foreach ($continents as $key => $filename) {
 | |
|     $continent = pathinfo($filename, PATHINFO_FILENAME);
 | |
|     $helper->log("Loading $continent");
 | |
|     $continent = str_replace(' ', '_', $continent);
 | |
|     $countries = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
 | |
|     $countryCount = count($countries);
 | |
| 
 | |
|     // Transpose $countries from a row to a column array
 | |
|     $countries = array_map('transpose', $countries);
 | |
|     $spreadsheet->getActiveSheet()
 | |
|         ->fromArray($countries, null, $column . '1');
 | |
|     $spreadsheet->addNamedRange(
 | |
|         new NamedRange(
 | |
|             $continent,
 | |
|             $spreadsheet->getActiveSheet(),
 | |
|             $column . '1:' . $column . $countryCount
 | |
|         )
 | |
|     );
 | |
|     $spreadsheet->getActiveSheet()
 | |
|         ->getColumnDimension($column)
 | |
|         ->setVisible(false);
 | |
| 
 | |
|     $spreadsheet->getActiveSheet()
 | |
|         ->setCellValue($continentColumn . ($key + 1), $continent);
 | |
| 
 | |
|     ++$column;
 | |
| }
 | |
| 
 | |
| // Hide the dropdown data
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->getColumnDimension($continentColumn)
 | |
|     ->setVisible(false);
 | |
| 
 | |
| $spreadsheet->addNamedRange(
 | |
|     new NamedRange(
 | |
|         'Continents',
 | |
|         $spreadsheet->getActiveSheet(),
 | |
|         $continentColumn . '1:' . $continentColumn . count($continents)
 | |
|     )
 | |
| );
 | |
| 
 | |
| // Set selection cells
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->setCellValue('A1', 'Continent:');
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->setCellValue('B1', 'Select continent');
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->setCellValue('B3', '=' . $column . 1);
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->setCellValue('B3', 'Select country');
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->getStyle('A1:A3')
 | |
|     ->getFont()->setBold(true);
 | |
| 
 | |
| // Set linked validators
 | |
| $validation = $spreadsheet->getActiveSheet()
 | |
|     ->getCell('B1')
 | |
|     ->getDataValidation();
 | |
| $validation->setType(DataValidation::TYPE_LIST)
 | |
|     ->setErrorStyle(DataValidation::STYLE_INFORMATION)
 | |
|     ->setAllowBlank(false)
 | |
|     ->setShowInputMessage(true)
 | |
|     ->setShowErrorMessage(true)
 | |
|     ->setShowDropDown(true)
 | |
|     ->setErrorTitle('Input error')
 | |
|     ->setError('Continent is not in the list.')
 | |
|     ->setPromptTitle('Pick from the list')
 | |
|     ->setPrompt('Please pick a continent from the drop-down list.')
 | |
|     ->setFormula1('=Continents');
 | |
| 
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->setCellValue('A3', 'Country:');
 | |
| $spreadsheet->getActiveSheet()
 | |
|     ->getStyle('A3')
 | |
|     ->getFont()->setBold(true);
 | |
| 
 | |
| $validation = $spreadsheet->getActiveSheet()
 | |
|     ->getCell('B3')
 | |
|     ->getDataValidation();
 | |
| $validation->setType(DataValidation::TYPE_LIST)
 | |
|     ->setErrorStyle(DataValidation::STYLE_INFORMATION)
 | |
|     ->setAllowBlank(false)
 | |
|     ->setShowInputMessage(true)
 | |
|     ->setShowErrorMessage(true)
 | |
|     ->setShowDropDown(true)
 | |
|     ->setErrorTitle('Input error')
 | |
|     ->setError('Country is not in the list.')
 | |
|     ->setPromptTitle('Pick from the list')
 | |
|     ->setPrompt('Please pick a country from the drop-down list.')
 | |
|     ->setFormula1('=INDIRECT($B$1)');
 | |
| 
 | |
| $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(12);
 | |
| $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
 | |
| 
 | |
| // Save
 | |
| $helper->write($spreadsheet, __FILE__);
 |