2016-08-05 5 views
1

PHP로 XML 파일을 읽으려고하는데 문제가 있습니다.치명적인 오류 : 잡히지 않은 PHPExcel_Calculation_Exception

우선, 내 셀이 20/11/2016 인 경우 PHP로 getFormattedValue()으로 가져 오지만 그 결과는 42370입니다. 왜 그럴까요?

그리고 다른 더 중요한 것은 내가 수식 셀에 결과를 원하는 것입니다 예를 들어 내가 셀에있다 : 128,하지만 공식은 : 그래서

=SI(O(INDICE(Precios;COINCIDIR(C$1;Tipos;0);COINCIDIR($A326;Días;0))="";INDICE(Precios;COINCIDIR(C$1;Tipos;0);COINCIDIR($A326;Días;0))=Caracter_Cierre);"";MAX(INDICE(Precios;COINCIDIR(C$1;Tipos;0);COINCIDIR($A326;Días;0));INDICE(Precios_Minimos;COINCIDIR(C$1;Tipos_Precios_Minimos;0);3))) 

, 그 수 로 :

Fatal error: Uncaught PHPExcel_Calculation_Exception: Tesipro!C2 -> Formula Error:

내가 무엇을 해야할지하지 않습니다 다음 getCalculatedValue()하지만 난 그런 오류가 발생했습니다.

답변

0

First of all, if my cell is: 20/11/2016, I get that in php with getFormattedValue() but its result is: 42370. Why that?

42370은 MS Excel 직렬화 된 타임 스탬프입니다. 내부적으로 MS Excel은 날짜/시간을 숫자 타임 스탬프로 유지합니다. 1900 년 1 월 1 일 (또는 Excel의 Mac 버전 인 경우 1904 년 1 월 1 일) 이후의 일수를 유지하는 float 값으로, 시간은 분수 부분으로 시간과 함께 사용됩니다. 그런 다음 숫자 형식 마스크를 사용하여 그 값을 사람이 읽을 수있는 형식으로 날짜로 표시합니다.

일반적으로 getValue()은 원시 셀 값,이 경우 serialize 된 타임 스탬프를 반환합니다. getFormattedValue()은 숫자 형식 마스크도 적용하여 해당 값을 MS Excel GUI에 표시되는 형식의 문자열로 변환합니다. getFormattedValue()을 사용하고 여전히 42370 값이 표시된 경우 readDataOnly이 true로 설정된 파일을로드 했으므로 숫자 형식 마스크를로드하지 않도록 PHPExcel에 알려 주므로 형식 마스크를 적용 할 수 없습니다. 직렬화 된 시간 소인 값을 표시 가능한 날짜 형식으로 변환하십시오.


그리고 수식 문제에 대한, 내가 값을 계산하려고 계산 엔진의 실행 세부 사항을 분석, 파일 자체에 액세스하지 않고 원인을 확인하기 위해 많은 것을 할 수 없습니다; 디버그 모드에서 계산을 실행하는 방법을 보여주는 gist here이 있습니다. 이 정보를 통해 문제를 쉽게 진단하고 진단 할 수 있습니다.

관련 문제