getCellValueByColumnAndRow-> getCalculatedValue()无效PHPExcel?

时间:2017-05-05 10:06:19

标签: php phpexcel

我试图找出在PHPExcel中使用setCellValueByColumnAndRow时结果不会受到影响的原因。

我做错了吗?

第一个版本将结果设置为整数0(尝试使用两种不同的方法来获取计算值)

//Version 1 - generating incorrect result (should 77*5 = 385, but is 0)
$objPHPExcel = new PHPExcel();                      
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, 1, '=A2*5' ); //A1 
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 1, 1, 77 ); //A2
echo '<br /> Value A1= ' . $objPHPExcel->getActiveSheet()-
>getCellByColumnAndRow(0,1)->getValue();
echo '<br />Value A2= ' . $objPHPExcel->getActiveSheet()-
>getCellByColumnAndRow(1,1)->getValue();

echo '<br />Result=' . $objPHPExcel->getActiveSheet()-
>getCellByColumnAndRow(0,1)->getCalculatedValue();
echo '<br />Result=' . $objPHPExcel->getActiveSheet()->getCell("A1")-
>getCalculatedValue();
echo '<br /><br />';

第二个版本在使用字母和字符设置值时按预期工作:

//Version 2 - generating correct result (77*5 = 385)
$objPHPExcel = new PHPExcel();                      
$objPHPExcel->getActiveSheet()->setCellValue( "A1", '=A2*5' ); //A1
$objPHPExcel->getActiveSheet()->setCellValue( "A2", 77 ); //A2
echo '<br />Value A1= ' . $objPHPExcel->getActiveSheet()->getCell("A1")-
>getValue();
echo '<br />Value A2= ' . $objPHPExcel->getActiveSheet()->getCell("A2")-
>getValue();
echo '<br />Result=' . $objPHPExcel->getActiveSheet()->getCell("A1")-
>getCalculatedValue();
echo '<br />Result=' . $objPHPExcel->getActiveSheet()-
>getCellByColumnAndRow(0,1)->getCalculatedValue();

输出版本1:

Value A1= =A2*5
Value A2= 77
Result=0
Result=0

输出版本2:

Value A1= =A2*5
Value A2= 77
Result=385
Result=385

这是PHPEXcel中的错误还是我只是做错了

我想使用setCellValueByColumnAndRow的原因是我有一个这样的数组是从post请求创建的,我想重新计算数组的更改值:(上面版本1和版本2的示例是for测试它如何与PHPExcel一起使用并且与此数组无关)

array 
  0 => 
    array (size=2)
      1 => string '6000' (length=4)
      2 => string '=A2*5' (length=5)
  1 => 
    array (size=2)
      1 => string '60009' (length=5)
      2 => string '=A2*5' (length=5)
  2 => 
    array (size=2)
      1 => string '7000' (length=4)
      2 => string '=A3*5' (length=5)
....

更新 这不是重复PHPExcel setCellValueByColumnAndRow not writing data to spreadsheet,因为该问题与公式计算结果无关。实际值在我的问题中设置到单元格中,但是当使用getCellValueByColumnAndRow获取计算值时,它似乎不起作用。我没有看到我的问题与被标记为可能重复的问题之间的联系。我也改变了这个问题的标题,以便更清楚地说明实际问题是什么。

1 个答案:

答案 0 :(得分:1)

奇怪的是......

有时它很容易......很容易......我只是出于某种原因混淆了行和列):

现在它适用于此代码(正如预期的那样):

$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, 1, '=A2*5' ); //A1 
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, 2, 77 ); //A2

而不是

$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, 1, '=A2*5' ); //A1 
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 1, 1, 77 ); //A2