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__);
 |