phpspreadsheet 를 이용한 Excel 파일 읽기
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
코알못이 기존 모듈을 참고해가며 만들고 있다보니 모르는 부분이 넘 많네요...ㅜ
phpspreadsheet 를 이용하여 엑셀파일을 읽는 부분까지는 어찌저찌해서 구현하였는데
그값을 뷰페이지에 넘겨주는것을 몰라 이렇게 글을 올립니다.
<form enctype="multipart/form-data" action="/" method="POST" id="" class="form">
<div class="x_control-group">
<input type="hidden" name="module" value="excelimport" />
<input type="hidden" name="act" value="procExcelimportAdminExcelUpload" />
<input name="uploadedfile" type="file" required="required" />
<input type="submit" value="엑셀파일 업로드 실행" />
</div>
</form>
<table class="excle_table">
......
생략
......
<div class="x_control-group">
<input type="hidden" name="module" value="excelimport" />
<input type="hidden" name="act" value="procExcelimportAdminExcelUpload" />
<input name="uploadedfile" type="file" required="required" />
<input type="submit" value="엑셀파일 업로드 실행" />
</div>
</form>
<table class="excle_table">
......
생략
......
public function procExcelimportAdminExcelUpload()
{
$args = Context::getRequestVars();
.......생략...........
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
$spreadData = $spreadsheet-> getActiveSheet()->toArray();
var_dump($spreadData);exit; //데이터값 출력 확인
{
$args = Context::getRequestVars();
.......생략...........
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
$spreadData = $spreadsheet-> getActiveSheet()->toArray();
var_dump($spreadData);exit; //데이터값 출력 확인
$spreadData 값을 어떻게 넘겨하는건가요?
조언 부탁드립니다. 감사합니다.
댓글 13
예)
Context::set('excel', $spreadData); 한 뒤 템플릿에서 $excel 변수로 사용
물론 템플릿에서 적절히 해당 변수 가공해서 출력해야 합니다.
Context::set('excel', $spreadData);
코드 작성 후
importexcel.html 화일에 <pre>{print_r($excel)}</pre> 확인했으나 값이 않나오네요.
~view.php
function dispMobileinfoAdminExcel() {
$this->setTemplateFile('importexcel');
}
조언 감사합니다.
물론 새로고침시 오작동 등 각종 문제점이 발생하니 정석은 아래 댓글대로 분리하는겁니다. 별도 DB 저장후 다시 저장하는게 곤란하다면 세션변수에 저장해 두었다가 view에서 세션변수의 내용을 출력하는 식으로 구현해도 됩니다.
답변감사합니다.
네. 당연히 안되죠. 저는 된다고 적은 적 없습니다. 정석은 MVC 패턴 따라서 구현하는게 맞지만... 처음부터 알려드리면 이해하시기 힘들것 같아 proc에서 출력할수 있도록 답변 드린겁니다.
controller에서는 HTML을 직접 출력하지 않는 것이 불문율입니다.
새로고침시 경고창이 뜨는 것은 물론, 보안상으로도 안 좋은 점이 많기 때문입니다.
엑셀 데이터든 그걸 처리한 결과든 일단 어딘가에 저장해 두고,
view 화면으로 리다이렉트한 후에 거기서 다시 읽어오도록 해야겠지요.
Post/Redirect/Get이라고 아주 잘 정립된 디자인 패턴입니다.
https://en.wikipedia.org/wiki/Post/Redirect/Get
조언 감사합니다.
저런 데이터 들여오기 기능을 구현할 때는
들여온 데이터를 controller에서 일단 모두 정리하여 DB에 집어넣고,
view에서 그 DB를 다시 불러오는 형식으로 구현하는 것이 일반적입니다.
어차피 DB에 저장하려고 들여오는 것일 테니까요.
개발 도중 controller가 제대로 작동하고 있는지 확인하는 용도로는
이미 하고 계신 것처럼 var_dump + exit으로도 충분하고요.
엑셀데이터를 읽어들여 view 에 먼저 뿌린 후
일괄등록이라는 액션을 주었을때 DB에 입력하려고 했었습니다. ^^
조언해주신대로 DB생성으로 방향을 바꾸어 보겠습니다.(잘될지 모르겠지만..ㅜ ^^)
controller → view → controller → view로 여러 번 왔다갔다하거나,
DB에 저장하지 않고 데이터만 반환하는 중간 단계의 로직을 따로 만들어야 할 테니...
그냥 임시로라도 DB에 저장해두고 보여주는 편이 훨씬 깔끔하지요.
최소한의 클릭으로 작업을 마칠 수 있는 방법이 사용자도 편하고 개발하기도 편하죠. ㅎㅎ