2016-04-12 3 views
0

Подобно этим документам.Заменить формулу со значением ячейки PHPExcel

https://support.office.com/en-us/article/Replace-a-formula-with-its-result-32a9675c-45f0-4a15-b130-d55356437c86 (для Mac) И https://support.office.com/en-us/article/Replace-a-formula-with-its-result-38001951-c0e8-4fbd-9048-37ef81e2891e (для Windows)

Можно ли заменить формулу со значением клеток с использованием PHPExcel.

Например: Дана ячейка 'A1', которая содержит формулу "= 'Sheet1'! L2". Формула равна 1. Есть ли способ заменить функцию на «1» и удалить формулу ввода с помощью PHPExcel?

Если нет, это было бы очень полезно для оптимизации и устранения чрезмерных проблем, возникающих из -> getOldCalculatedValue/getCalculatedValue/-> setPreCalculateFormulas().

Благодаря

+0

Итак, тиражирование «CMD + = 'мы можем сэкономить массу времени. Таким образом, ячейка A1 содержит формулу. Мы делаем $ objPHPExcel-> getActiveSheet() -> getCell ('A1') -> FormulaValue(); Мы бы взяли содержимое ячейки без вычисления и заменили ее в строке формул, реплицируя «CMD + =». Это было бы прекрасно.! – MakDo

+0

Извините, на английском языке пожалуйста .... что это за метод 'FormulaValue()'? Что оно делает? От куда это? –

+0

И нет ничего, чтобы остановить вас писать код, который префиксы любой необработанный формулу с 'CMD + =' Сейчас:. '$ ObjPHPExcel-> getActiveSheet() -> setCellValue ( 'A1', 'CMD +' $ objPHPExcel-> getActiveSheet () -> getCell ('A1') -> getValue() ); 'Я просто не понимаю, чего он добьется –

ответ

0

Логически

$objPHPExcel->getActiveSheet() 
    ->setCellValue(
     'A1', 
     $objPHPExcel->getActiveSheet() 
      ->getCell('A1') 
      ->getCalculatedValue() 
    ); 

Хотя я не понимаю, как он может оптимизировать что-либо, потому что вы все равно должны вычислить формулу, чтобы получить значение равно

+0

Привет Марк. Ну да, но в моем случае ячейка A1, например, правильно держит значение. После того, как я сохраню с помощью PHPExcel getCalculatedValue Вызывает исключение catch и getOldCalculatedValue возвращает 0. Ive прочитал все ваши комментарии по установке setPreCalculateFormulas(). Но мой код возвращается с фатальной ошибкой: исключить исключение «PHPExcel_Calculation_Exception» с сообщением «Data! I1 -> Formula Error: произошла непредвиденная ошибка» в /Applications/MAMP/htdocs/GenRe/Classes/PHPExcel/Cell.php:300 Stack trace: # 0 и Data! I1 - это строка, не являющаяся формулой. – MakDo

+0

Итак, если мы можем сохранить файл excel с ячейкой, содержащей правильное значение, например, для ячейки A1, а затем записать код, чтобы заставить эту ячейку заменить формулу на значение 1. Тогда во многих случаях ошибки не возникнут. Таким образом, мы бы выполнили IGNORED функцию getCalculatedValue. Разве вы не думаете? – MakDo

+0

Если PHPExcel не может вычислить формулу, чтобы получить значение, тогда нет реальной альтернативы. 'getOldCalculatedValue()' не заслуживает доверия, слишком много способов, в которых это значение может быть ошибочным (или даже не существовать), чтобы оно было чем-то большим, чем аварийное резервное копирование ..... если вам абсолютно необходимо это сделать замена; то '$ objPHPExcel-> getActiveSheet() -> setCellValue ( 'A1', $ objPHPExcel-> getActiveSheet() -> GetCell ('A1') -> getOldCalculatedValue() )', но имейте в виду, что 'getOldCalculatedValue()' может не всегда возвращать правильное значение –

Смежные вопросы