谁能帮我一下phpExcel代码:
这个代码:$objPHPExcel->getActiveSheet()->getCell("AF19")->getCalculatedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getFormattedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getValue();
的回报:
#VALUE!
#VALUE!
=AE19*I19
提前感谢!:)
为了帮助调试问题,请在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');
该命令的输出应该有助于诊断问题
如果您不确定单元格的内容(包括值或公式),我建议您首先检查单元格是否有公式,然后进行相应的复制粘贴。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()函数非常麻烦,需要大量内存才能正确执行。
我遇到了一个类似的问题,getCalculatedValue()返回#VALUE!在引用另一个包含公式的单元格的单元格上。
原因最终是引用的单元格之一包含NULL值,即使Excel正确处理了这个。我所要做的就是给这个单元格添加一个0值它就可以计算出来了
您应该尝试打开原始Excel文件并查看单元格AF19。最有可能的是,即使MS Excel本身在计算值时也有问题,因为位于AF19的公式有问题。
可能是
这个公式试图将两个不包含数字
的单元格相乘= AE19 * I19
AE19包含一个逗号,不格式化为数字,因此PHPExcel将其视为字符串
在这种情况下,您可以先尝试在excel中格式化数据,右键单击(在excel中)并指定数字格式。
我认为这个问题的根源是当一个单元格是空的。当单元格设置为空字符串时,某些公式可能会失败。下面是一个失败的公式示例:
=TEXT(A1, "mm/dd/yyyy")
为了处理这个"#VALUE!"问题,在一个小项目中,我将空单元格设置为NULL
而不是''
。
$target = ($target == '')? NULL: $target; // without this, empty cells end up being #VALUE! after some formulas
//你可以这样设置
$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);