PHPExcel не вычисляет формулы

#php #excel #excel-formula #phpexcel

#php #excel #excel-формула #phpexcel

Вопрос:

Итак, я вроде как новичок в PHPExcel и создаю таблицу с данными из формы (не готово, но придет), но у меня проблема, мои формулы не вычисляются, я тестировал предустановленные формулы и импортировал формулы из кода, но ни одна из них не работает, все, что я получаю, это 0 и защищенный режим, и если я нажимаю editsheet и щелкаю по ячейке, где находится формула, и нажимаю enter, это работает и вычисляет это

 <?php
/** Error reporting */
error_reporting(E_ALL);

/** PHPExcel */
include 'Classes/PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
include 'Classes/PHPExcel/Writer/Excel2007.php';
include 'Classes/PHPExcel/IOFactory.php';



// Load file if it doesn't exists
if (file_exists('Exceltime.xlsx'))
{
    $objPHPExcel = PHPExcel_IOFactory::load('Exceltime.xlsx');
}
else
{
    $objPHPExcel = new PHPExcel();
}



$objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('C4', '10:00')
        ->setCellValue('D4', '18:00')
        ->setCellValue('E4', '01:30')
        ->setCellValue('F4', '=(D4-C4-E4)');

$objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('C5', '10:00')
        ->setCellValue('D5', '18:00')
        ->setCellValue('E5', '01:30')
        ->setCellValue('F5', '=(D5-C5-E5)');




$objPHPExcel->getActiveSheet()->setTitle('TidsRapport Namn');
header('Content-Type: application/vnd.openxmlformats-              officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Tidsrapport Namn.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->setPreCalculateFormulas(TRUE);
$objWriter->save('php://output');
?>
  

Итак, все, что ему нужно сделать, это импортировать начало / конец / перерыв часов работы, а затем формула вычисляет, сколько часов / минут вы работаете

также, если есть лучший способ или что-то, что я должен сделать, я могу попробовать это 🙂

Комментарии:

1. Проблема в том, что это просто строки: они имеют значение для вас как человека, но не имеют особого значения для PHPExcel…. вам необходимо сохранить их в виде сериализованных временных меток MS Excel

Ответ №1:

Лучшим ответом является фактическое использование значений даты и времени MS Excel, а не надежда, что PHPExcel / MS Excel догадается, что ваши строковые значения, такие как ( '10:00' ), должны быть временами.

Согласно документации PHPExcel

 $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('C4', PHPExcel_Calculation_DateTime::TIMEVALUE('10:00'))
        ->setCellValue('D4', PHPExcel_Calculation_DateTime::TIMEVALUE('18:00'))
        ->setCellValue('E4', PHPExcel_Calculation_DateTime::TIMEVALUE('01:30'))
        ->setCellValue('F4', '=(D4-C4-E4)');
$objPHPExcel->getActiveSheet()->getStyle('C4:E4')
    ->getNumberFormat()
    ->setFormatCode('hh:mm');
$objPHPExcel->getActiveSheet()->getStyle('F4')
    ->getNumberFormat()
    ->setFormatCode('[hh]:mm');
  

Комментарии:

1. Приятно, что это работает! но теперь мой вопрос заключается в том, будет ли это работать с php-формой, поэтому вместо ’10: 00′ будет ли это $ C4 и т.д. И импортировать его из формы, А также есть ли простой способ создать цикл для этого, или мне нужно сделать около 30 штук, потому что то, что я делаю, занимает месяц на каждом листе

2. Как вы думаете, почему строковая переменная может работать иначе, чем строковый литерал? До тех пор, пока значение, содержащееся в переменной, правильно отформатировано, чтобы выглядеть как значение времени …. и PHP предоставляет вам все инструменты для написания циклов, хотя вы можете использовать fromArray() метод worksheet