채택완료

PHPExcel 로 엑셀 파일 업로드시 에러 문의드립니다. (PHPExcel_Calculation_Exception)

2019-01-29 (화) 21:57:47 6,360

phpexcel 로 엑셀 파일의 내용을 db에 넣어야 되는데
엑셀에 있는 함수 계산식으로 되어 있는 셀에서 에러가 뜹니다.

검색해보니 getValue 대신 getCalculatedValue 를 쓰면 된다고 하는데 그렇게 해도 아래와 같은 에러가 뜹니다.

Fatal error: Uncaught exception  'PHPExcel_Calculation_Exception' with message 'Sheet1!B2 -> Formula Error: Unexpected~~

에러 나는 부분의 함수 계산식은 아래 형식처럼 되어 있습니다.(보기 편하게 줄바꿈 처리했고, 실제는 더 길어요)

=IFS(
OR(ISNUMBER(SEARCH({"A","B","C","D","E"},L18))),
IFS(ISNUMBER(SEARCH("0A",J18)),ROUND(U18*1.08+V18,2),
ISNUMBER(SEARCH("0B",J18)),ROUND(U18*1.1+V18,2))

OR(ISNUMBER(SEARCH({"AA","BB","CC","DD","EE"},L18))),
IFS(ISNUMBER(SEARCH("0A",J18)),ROUND(U18*1.08+V18,2),

혹시 해결 방법 아시면 도움 부탁 드립니다.
감사합니다.

Copy
require_once( G5_PLUGIN_PATH."/PHPExcel/Classes/PHPExcel.php");
 
$objReader = PHPExcel_IOFactory::createReader($FileType);
$obj = $objReader->load($up_file);
$obj->setActiveSheetIndex(0);
$objWorksheet = $obj->getActiveSheet();
 
$row_cnt = $objWorksheet->getHighestRow();
 
for ($i=2; $i<=$row_cnt; $i++) {
    $id = $objWorksheet->getCell('A'.$i)->getValue();
    $price = $objWorksheet->getCell('B'.$i)->getCalculatedValue();
}
 
// $price 부분에서 에러 납니다.
|

답변 4개 / 댓글 4개

채택된 답변
+20 포인트
2019-01-29 (화) 22:32:37

 $price = $objWorksheet->getCell('B'.$i)->getCalculatedValue();

이부분의 셀값이 소수점인가요? 저부분을 소수점이 계속 발생하지 않게 처리를 해주어야합니다.

답변에 대한 댓글 3개

네~ 전부 소수점 입니다. 그런데

B1 = 11.07
B2 = 12.70
B3 = ROUND(U30/0.9+V30,2) => 4.85
B4 = ifs(or(~~~ 함수 계산식 => 77.12


이렇게 되어 있으면 B3 까지는 제대로 출력되는데

B4 에서 에러가 뜨네요.

혹시 다르게 처리할 수 있는 방법이 있을까요?
2019-01-29 (화) 23:00:48
B4 함수계산식중에 소수점이 너무길거나 이런게있는게 아닐가요?
그게없다면 에러는 안날텐데요.. 함수안에서 라운드처리를 한번해보세요.
함수 안에 라운드 처리는 되어 있습니다.
어디에서 문제가 발생하는 건지 알 수가 없네요..;;

좀 더 찾아보고 안되면 다른 방법으로 처리해야겠네요.

답변 감사드립니다.

해당 함수 제거 후 사용하기로 했습니다.

답변 주신 분들께 감사드립니다.

phpexcel(2007) 에서 허용하지 않는 최신함수(ifs - 2016부터)를 사용한 것이 아닐까요

클라이언트에게 얘기해서 csv로 변환후 업로드 하셔라라고 하면 안될까요? ㅎ

답변에 대한 댓글 1개

방법을 못 찾으면 그렇게 할 생각인데 오케이 할지는 모르겠네요~

답변을 작성하려면 로그인이 필요합니다.