CI 묻고 답하기

제목 엑셀 파일 리드 시 엑셀에 빈셀 처리 문제
카테고리 CI 2, 3
글쓴이 주말생각 작성시각 2020/11/20 11:36:52
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 7970   RSS

엑셀 파일의 1열에 각 행들만 읽어서 DB에 테이블과 매칭하여 DB에 저장하는 기능을 구현하고 있습니다.

DB에 저장은 잘 되는데, 문제는 엑셀에 빈셀이 있을 경우에는 Undefined offset 오류가 발생합니다.

빈셀 처리를 어떻게 해야하나요?

제 생각으로는 아래 코드의 getUserInfo()에서 뭔가 처리를 해줘야 할 것 같은데...

 

컨트롤러

//엑셀-DB 유저정보 가져오기

public function getUserInfo() {

   $szCnt = $this -> getRowCnt(); // 엑셀 파일 행의 개수

   for ($i = 1; $i <= $szCnt; $i++) {

   $m_id = $this -> sheet['cells'][$i][1];

   $mInfo[] = $this -> Member_model -> getDbData_where(['m_id' => $m_id], 'm_idx,m_id,m_regi');

    }

   return $mInfo;

}

 

private function getRowCnt() {

   return sizeof($this -> sheet['cells']);

}

 

 다음글 CIBoard 오늘접한 썡초보입니다. (2)
 이전글 pager 질문드립니다. (7)

댓글

테러보이 / 2020/11/20 11:38:55 / 추천 0
쉘에 값이 없으면 continue 하면 될듯한데요
주말생각 / 2020/11/20 11:50:00 / 추천 0

for문안에 아래와 같은 식으로 작성을 해봤는데 

for ($i = 1; $i <= $szCnt; $i++) {
if($this -> sheet['cells'][$i][1] == null){
continue;
}
$m_id = $this -> sheet['cells'][$i][1];
$mInfo[] = $this -> Member_model -> getDbData_where(['m_id' => $m_id], 'm_idx,m_id,m_regi');
 
}
 
Undefined offset: 2 에러가 발생하는 것으로 봐서는 getRowCnt()를 수정해야 하는게 아닐까요?
PureAni / 2020/11/20 12:24:56 / 추천 0

엑셀 파일이 어떻게 되어있고, 어디서 에러가 발생하나요?

셀의 중간이 빠져서 그럴 가능성도 있습니다.

총 row가 2개로 나오는데, A1 과 C1이 있고 B1이 없으면 B1 에서 에러가 발생하는 경우도 있습니다.

if (isset($this->sheet['cells'][$i][1]))

{

    $m_id = $this -> sheet['cells'][$i][1];

    $mInfo[] = $this -> Member_model -> getDbData_where(['m_id' => $m_id], 'm_idx,m_id,m_regi');

}

그리고 Undefined offset: 2 가 정확히 어떤 시점에서 발생하나요?

만약에 if 문에서 뜬다면, if 문 시점에서 없는 offset 을 if 문으로 사용하려고 해서 뜨는 에러입니다.

array 의 null 체크는 isset 으로 하시는게 좋습니다.

한대승(불의회상) / 2020/11/20 13:23:19 / 추천 0

아래처럼 코드를 수정하시면 될듯

if(!isset($this -> sheet['cells'][$i][1])){ 
continue;
}

 

주말생각 / 2020/11/20 14:08:07 / 추천 0

감사합니다. isset으로 null 체크를 하니 잘 되네요.

이제 엑셀 파일에 DB에 입력되지 않은 회원 계정을 걸러내서 실제 저장되는 수와 엑셀 수를 맞추면은 최종 해결이 될 듯 합니다.