有人可以帮助我使用phpExcel代码:
此代码:
$objPHPExcel->getActiveSheet()->getCell("AF19")->getCalculatedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getFormattedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getValue();
返回:
#VALUE!
#VALUE!
=AE19*I19
提前谢谢! :)
答案 0 :(得分:6)
要帮助调试问题,请在DEBUG模式下运行计算:
function testFormula($sheet,$cell) {
$formulaValue = $sheet->getCell($cell)->getValue();
echo 'Formula Value is' , $formulaValue , PHP_EOL;
$expectedValue = $sheet->getCell($cell)->getOldCalculatedValue();
echo 'Expected Value is ' ,
((!is_null($expectedValue)) ?
$expectedValue :
'UNKNOWN'
) , PHP_EOL;
$calculate = false;
try {
$tokens = PHPExcel_Calculation::getInstance()->parseFormula($formulaValue,$sheet->getCell($cell));
echo 'Parser Stack :-' , PHP_EOL;
print_r($tokens);
echo PHP_EOL;
$calculate = true;
} catch (Exception $e) {
echo 'PARSER ERROR: ' , $e->getMessage() , PHP_EOL;
echo 'Parser Stack :-' , PHP_EOL;
print_r($tokens);
echo PHP_EOL;
}
if ($calculate) {
try {
$cellValue = $sheet->getCell($cell)->getCalculatedValue();
echo 'Calculated Value is ' , $cellValue , PHP_EOL;
echo 'Evaluation Log:' , PHP_EOL;
print_r(PHPExcel_Calculation::getInstance()->debugLog);
echo PHP_EOL;
} catch (Exception $e) {
echo 'CALCULATION ENGINE ERROR: ' , $e->getMessage() , PHP_EOL;
echo 'Evaluation Log:' , PHP_EOL;
print_r(PHPExcel_Calculation::getInstance()->debugLog);
echo PHP_EOL;
}
}
}
$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Calculation::getInstance()->writeDebugLog = true;
testFormula($sheet,'AF19');
此输出应有助于诊断问题
答案 1 :(得分:3)
如果您不确定单元格的内容(包含的值或公式),我建议您主要检查单元格是否有公式,然后复制 - 相应粘贴。在这种情况下,getOldCalculatedValue()非常有用。这是一个例子:
$code = $sheet->getCell('A'.$y)->getValue();
if(strstr($code,'=')==true)
{
$code = $sheet->getCell('A'.$y)->getOldCalculatedValue();
}
$objPHPExcel4->setActiveSheetIndex(0)
->setCellValue('A'.$l, $code);
对于大型数据集,getCalculatedValue()函数非常麻烦,并且需要大量内存才能正确执行。
答案 2 :(得分:1)
我遇到了类似的问题,getCalculatedValue()返回了#VALUE!在引用包含公式的另一个单元格的单元格上。
原因最终是被引用的包含NULL值的单元格之一,即使Excel正确处理了这一点。我所要做的只是在该单元格中添加0值,计算得很好。
答案 3 :(得分:0)
您应该尝试打开原始Excel文件并查看单元格AF19。很可能甚至MS Excel本身也无法计算该值,因为AF19的公式存在问题。
可能是那个
此公式试图将两个不包含数字的单元格相乘
= AE19 * I19
AE19包含一个逗号,未格式化为数字,因此PHPExcel将其视为字符串
在这种情况下,您可以尝试通过右键单击(在Excel中)并指定数字格式来格式化Excel中的数据。
答案 4 :(得分:0)
//你可以像这样设置
$objPHPExcel->getActiveSheet()->setCellValue('A20','=AE19 * I19');
//因为php excel在字符串中定义代码所以你会得到错误。因为在phpexcel中你必须使用公式excel。不能像这样的A1 + A2或者哦。
你可以像这样在PHP中繁殖
$bil1 = $objPHPExcel->getActiveSheet()->getCell("AE19")->getValue()
$bl2 = $objPHPExcel->getActiveSheet()->getCell("I19")->getValue()
//函数乘法。
$total=$bil1*$bil2;
之后,您可以在单元格中设置总数
$objPHPExcel->getActiveSheet()->setCellValue('A20',$total);
这在我的php中工作。
答案 5 :(得分:0)
我认为当一个单元格为空时,就会出现这个问题的根源。当单元格设置为空字符串时,某些公式可能会失败。这是一个失败的示例公式:
=TEXT(A1, "mm/dd/yyyy")
为了对付这个" #VALUE!"问题,在一个小项目中,我将空单元格设置为NULL
而不是''
。
$target = ($target == '')? NULL: $target; // without this, empty cells end up being #VALUE! after some formulas