2014-02-26 101 views
1

我每次嘗試導出Excel電子表格時都會收到錯誤。錯誤如下:PHPExcel - 致命錯誤:未收到異常'異常'與消息

Fatal error: Uncaught exception 'Exception' with message 'Worksheet!J6 -> Worksheet!J6 -> Cyclic Reference in Formula' in /classes/PHPExcel/Cell.php:293 Stack trace: 
    #0 /classes/PHPExcel/Writer/Excel2007/Worksheet.php(997): PHPExcel_Cell->getCalculatedValue() 
    #1 /classes/PHPExcel/Writer/Excel2007/Worksheet.php(943): PHPExcel_Writer_Excel2007_Worksheet->_writeCell(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet), 'J6', Array, Array) 
    #2 /classes/PHPExcel/Writer/Excel2007/Worksheet.php(83): PHPExcel_Writer_Excel2007_Worksheet->_writeSheetData(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet), Array) 
    #3 /classes/PHPExcel/Writer/Excel2007.php(282): PHPExcel_Writer_Excel2007_Worksheet->writeWorksheet(Object(PHPExcel_Worksheet), Array, false) 
    #4 /includes/reports_funcs.php(620): PHPExcel_Writer_Excel2007->save('reports/risk-bo...') #5 /createXlsxReport. in /classes/PHPExcel/Cell.php on line 293 

我試圖尋找一個解決方案,但到目前爲止沒有運氣。我發現另一個stackoverflow問題,建議在文件保存前添加$objWriter->setPreCalculateFormulas(FALSE);,但這給了我一個空電子表格。

它最近纔剛剛開始發生,所以我很困惑,爲什麼會發生這種情況。任何幫助將不勝感激,乾杯

示例代碼 - 編輯

$objPHPExcel->getActiveSheet(0) 
    ->setCellValueByColumnAndRow(0, $row, $pol_ref . 'e' . $end_numb) 
    ->setCellValueByColumnAndRow(1, $row, $insured_name) 
    ->setCellValueByColumnAndRow(2, $row, $vessel_name) 
    ->setCellValueByColumnAndRow(3, $row, $insurance_type . ' - ' . $end_type) 
    ->setCellValueByColumnAndRow(4, $row, $insured_domicile) 
    ->setCellValueByColumnAndRow(5, $row, gmdate("d-m-Y",$date_logged)) 
    ->setCellValueByColumnAndRow(6, $row, $inception_date) 
    ->setCellValueByColumnAndRow(7, $row, $expiry_date) 
    ->setCellValueByColumnAndRow(8, $row, ($policy_limit == 0.00?$loh_limit:$policy_limit)) 
    ->setCellValueByColumnAndRow(9, $row, $premium) 
    ->setCellValueByColumnAndRow(10, $row, "=sum(J".($row)."*".($seacurus_percent/100).")") 
    ->setCellValueByColumnAndRow(11, $row, "=sum(J".($row)."*".($placing_percent/100).")") 
    ->setCellValueByColumnAndRow(12, $row, "=sum(J".($row)."*".($rebate_percent/100).")") 
    ->setCellValueByColumnAndRow(13, $row, "=sum(J".($row)."*".($iptpercent/100).")") 
    ->setCellValueByColumnAndRow(14, $row, "=sum(".($binder_id==6?"(J".$row." - (P".$row."+L".$row."+O".$row."+P".$row."))":"J".($row))."*".$bgn_percent.")") 
    ->setCellValueByColumnAndRow(15, $row, "=sum(J".($row)."*".$ghc_percent.")") 
    ->setCellValueByColumnAndRow(16, $row, "=sum(J".($row)."*".($commission_percentage_sum/100).")"); 
$row++; 
+0

什麼版本的PHPExcel? –

回答

1

如果您的公式包含循環引用,那麼你需要選擇如何對付他們,因爲你在MS Excel本身做。默認行爲是拋出一個像這樣的異常,這與MS Excel默認行爲的方式類似。 另一種方法是告訴PHPExcel由計算引擎設置爲要遵循一個固定數量的迭代的循環:

PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;

,或者指示循環迭代數目的任何值> = 1

PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 10;

// 10次迭代

+0

這將被放置在哪裏?文件導出之前? – Pooshonk

+0

是的,在保存文件之前 – shivam

+0

不幸運。當我添加它時,出現內存錯誤。當我修復內存錯誤時,它不會將數據放入電子表格 – Pooshonk

相關問題