8

有人可以帮助我使用 phpExcel 代码:

此代码:

$objPHPExcel->getActiveSheet()->getCell("AF19")->getCalculatedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getFormattedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getValue();

回报:

#VALUE!
#VALUE!
=AE19*I19

先感谢您!:)

4

6 回答 6

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');

此输出应有助于诊断问题

于 2013-05-23T08:11:11.973 回答
4

如果您不确定单元格的内容(包括值或公式),我建议您首先检查单元格是否有公式,然后相应地复制 - 粘贴。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() 函数确实很麻烦,并且需要大量内存才能正确执行。

于 2015-06-22T12:01:58.297 回答
1

我遇到了类似的问题,getCalculatedValue() 返回了#VALUE!在引用另一个包含公式的单元格的单元格上。

原因最终是引用的包含 NULL 值的单元格之一,即使 Excel 正确处理了这一点。我所要做的就是在该单元格中添加一个 0 值,它计算得很好。

于 2013-07-03T04:22:37.637 回答
0

您应该尝试打开原始 Excel 文件并查看单元格 AF19。由于位于 AF19 的公式有问题,甚至 MS Excel 本身也很可能无法计算该值。

可能是这样

此公式试图将两个不包含数字的单元格相乘

=AE19*I19

AE19 包含一个逗号并且未格式化为数字,因此 PHPExcel 将其视为字符串

在这种情况下,您可以尝试通过右键单击(在 excel 中)首先在 excel 中格式化数据并指定数字格式。

于 2013-05-23T08:02:14.700 回答
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.ini 中工作。

于 2015-08-07T04:01:37.667 回答
0

我认为这个问题的根源在于一个单元格是空的。当单元格设置为空字符串时,某些公式可能会失败。这是一个失败的示例公式:

=TEXT(A1, "mm/dd/yyyy")

为了处理这个“#VALUE!” 问题,在一个小项目中,我将空单元格设置为NULL而不是''.

$target = ($target == '')? NULL: $target; // without this, empty cells end up being #VALUE! after some formulas

于 2016-05-02T23:25:05.357 回答