티스토리 뷰
PHP - PHPExcel 에서 Dropdown 리스트 생성하기
- 데이터를 가공하여 출력된 엑셀의 Cell 에서 리스트로 항목이 출력되길 원하며
&&
잘못된 데이터 입력시 경고 모달 다이얼로그 박스도 출력되고
&&
리스트 값의 항목에 대해서 친절하게 타이틀과 코멘트 Note 까지 달린 옵션을 사용하고싶다.
결과
이런식으로
주요코드
핵심코드(dropdown) 만들어주는 코드는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <? // dropdown //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $objValidation2 = $objPHPExcel->getActiveSheet()->getCell('E1') -> getDataValidation(); $objValidation2 -> setType(PHPExcel_Cell_DataValidation::TYPE_LIST); $objValidation2 -> setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION); $objValidation2 -> setAllowBlank(true); $objValidation2 -> setShowInputMessage(true); $objValidation2 -> setShowErrorMessage(true); $objValidation2 -> setShowDropDown(true); // item 리스트와 다른 값을 기입할경우 에러 모달박스를 출력합니다. $objValidation2 -> setErrorTitle('Invalid date'); $objValidation2 -> setError('Date is not in list.'); // dropdown 박스에 마우스 가져가거나 선택할때 뜨는 타이들과 코멘트 입니다. $objValidation2 -> setPromptTitle('Select DOB date'); $objValidation2 -> setPrompt('Please pick a date from the drop-down list.'); $dates = '"01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31"'; $objValidation2 -> setFormula1($dates); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ?> | cs |
전체코드
구글링해도 실제 엑셀로 다운받아지는 소스는 거의 없어서
메모리에서 끝나는게 아니라 파일로 다운로드되도록 메타태그와 파일명 정도를 입력하여
전체코드를 첨부하니
copy & paste 로 간단히 확인이 가능할 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | <?php /** Error reporting */ //error_reporting(E_ALL); /** Include path **/ ini_set('include_path', ini_get('include_path').';../Classes/'); /** PHPExcel */ include dirname(__FILE__) . "/common/php/Classes/PHPExcel.php"; /** PHPExcel_Writer_Excel2007 */ include dirname(__FILE__) . '/common/php/Classes/PHPExcel/Writer/Excel2007.php'; // Create new PHPExcel object //echo date('H:i:s') . " Create new PHPExcel object\n"; $objPHPExcel = new PHPExcel(); // Set properties //echo date('H:i:s') . " Set properties\n"; $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw"); $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document"); $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document"); $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes."); // Add some data //echo date('H:i:s') . " Add some data\n"; $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello'); $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!'); $objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello'); $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!'); // Rename sheet //echo date('H:i:s') . " Rename sheet\n"; $objPHPExcel->getActiveSheet()->setTitle('Simple'); // dropdown //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $objValidation2 = $objPHPExcel->getActiveSheet()->getCell('E1') -> getDataValidation(); $objValidation2 -> setType(PHPExcel_Cell_DataValidation::TYPE_LIST); $objValidation2 -> setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION); $objValidation2 -> setAllowBlank(true); $objValidation2 -> setShowInputMessage(true); $objValidation2 -> setShowErrorMessage(true); $objValidation2 -> setShowDropDown(true); // item 리스트와 다른 값을 기입할경우 에러 모달박스를 출력합니다. $objValidation2 -> setErrorTitle('Invalid date'); $objValidation2 -> setError('Date is not in list.'); // dropdown 박스에 마우스 가져가거나 선택할때 뜨는 타이들과 코멘트 입니다. $objValidation2 -> setPromptTitle('Select DOB date'); $objValidation2 -> setPrompt('Please pick a date from the drop-down list.'); $dates = '"01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31"'; $objValidation2 -> setFormula1($dates); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Save Excel 2007 file //echo date('H:i:s') . " Write to Excel2007 format\n"; $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); // Echo done //echo date('H:i:s') . " Done writing file.\r\n"; ////////////////////////////////////////////////////////////////////////////////////////// $fileName = date("Ymd his", time() ).".xls"; // Redirect output to a client’s web browser (Excel5) header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"".$fileName."\""); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); ?> | cs |
9, 12 번 라인의 PHPExcel 경로만 제대로 변경해주면 사용할수 있을것 같다.
엑셀확인
참고 : https://stackoverflow.com/questions/38185924/populate-dropdown-with-phpexcel
thx to : Arun ( https://stackoverflow.com/users/3378245/arun )
'■ 백엔드 ■ > PHP' 카테고리의 다른 글
html에서 php 구문 사용하기 ( php에서 .html 파일 사용 하기 ) (0) | 2018.03.19 |
---|---|
php 에서 <?php 가 아닌 <? 로 축약어 사용하기 (0) | 2018.03.19 |
jpgraph - php graph to image (0) | 2017.04.18 |
php captcha (0) | 2015.06.23 |
PHP 세션 값 오류의 원인 (0) | 2015.06.18 |
댓글