최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

   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 경로만 제대로 변경해주면 사용할수 있을것 같다.



   엑셀확인


20170531 034431.xls


참고 : https://stackoverflow.com/questions/38185924/populate-dropdown-with-phpexcel


thx to : Arun ( https://stackoverflow.com/users/3378245/arun )




댓글