2016-10-24 3 views
1

그래서 phpExcel에 약간 새로운 형식의 데이터를 시트에 넣으려고했지만 (수고도하지는 않지만) 문제가 있습니다. 수식을 계산하지 못했습니다. 수식을 테스트하고 코드에서 수식을 가져 왔습니다. 그러나 아무도 못해 내가 얻을 모두 0 보호 모드 작동하지 그리고 난 작동 입력하고 그래서이해야 할 모든 가져 오기 작업 시계가PHPExcel은 수식을 계산하지 않습니다

<?php 
/** Error reporting */ 
error_reporting(E_ALL); 

/** PHPExcel */ 
include 'Classes/PHPExcel.php'; 

/** PHPExcel_Writer_Excel2007 */ 
include 'Classes/PHPExcel/Writer/Excel2007.php'; 
include 'Classes/PHPExcel/IOFactory.php'; 



// Load file if it doesn't exists 
if (file_exists('Exceltime.xlsx')) 
{ 
    $objPHPExcel = PHPExcel_IOFactory::load('Exceltime.xlsx'); 
} 
else 
{ 
    $objPHPExcel = new PHPExcel(); 
} 



$objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('C4', '10:00') 
     ->setCellValue('D4', '18:00') 
     ->setCellValue('E4', '01:30') 
     ->setCellValue('F4', '=(D4-C4-E4)'); 

$objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('C5', '10:00') 
     ->setCellValue('D5', '18:00') 
     ->setCellValue('E5', '01:30') 
     ->setCellValue('F5', '=(D5-C5-E5)'); 




$objPHPExcel->getActiveSheet()->setTitle('TidsRapport Namn'); 
header('Content-Type: application/vnd.openxmlformats-    officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="Tidsrapport Namn.xlsx"'); 
header('Cache-Control: max-age=0'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->setPreCalculateFormulas(TRUE); 
$objWriter->save('php://output'); 
?> 

그것을 계산 editsheet을 클릭하고 수식이있는 셀을 클릭하고 충돌하는 경우 시간 시작/종료/중단 다음 수식을 계산하는 시간은 몇 시간/분입니까

더 좋은 방법이나 뭔가가 있다면 그것을 시도하기 위해 자유롭게해야합니다 :)

+0

문제 사항에 따라

이 단순히 문자열이다 : 그들은 인간으로 당신에게 의미를 가지고 있지만, PHPExcel에 특별한 의미는 .... 당신은 MS Excel과 같은 이러한 저장할 필요가 없습니다 serialized timestamps –

답변

0

더 나은 대답은 실제로 PHP Excel/MS Excel이 ('10:00')와 같은 문자열 값이 시간이라고 생각한다고 기대하기보다는 MS Excel 날짜/시간 값을 사용하는 것입니다. PHPExcel documentation

$objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('C4', PHPExcel_Calculation_DateTime::TIMEVALUE('10:00')) 
     ->setCellValue('D4', PHPExcel_Calculation_DateTime::TIMEVALUE('18:00')) 
     ->setCellValue('E4', PHPExcel_Calculation_DateTime::TIMEVALUE('01:30')) 
     ->setCellValue('F4', '=(D4-C4-E4)'); 
$objPHPExcel->getActiveSheet()->getStyle('C4:E4') 
    ->getNumberFormat() 
    ->setFormatCode('hh:mm'); 
$objPHPExcel->getActiveSheet()->getStyle('F4') 
    ->getNumberFormat() 
    ->setFormatCode('[hh]:mm'); 
+0

잘 작동합니다! 하지만 지금 내 질문은 '10 : 00 '대신 $ C4 등의 PHP 폼을 사용하여이 작업을 수행하고 폼에서 가져 와서이 루프를 만들 수있는 간단한 방법입니다. 30 + ish와 같이 만드십시오. 왜냐하면 제가 만드는 것은 한 달에 한 장씩이기 때문입니다. – Frilleee

+0

왜 문자열 변수가 문자열 리터럴과 다르게 작동한다고 생각합니까? 변수에 포함 된 값이 시간 값처럼 보이도록 올바르게 형식화되어 있으면 .... PHP는 워크 시트의'fromArray()'메소드 –

+0

을 사용할 수는 있지만 루프를 작성하는 데 필요한 모든 도구를 제공합니다. , 어쨌든 도움을 주셔서 감사합니다 :) – Frilleee

관련 문제