PHP — прайс в Екселе …

Сделал клиенту прайс в екселе, точнее формирователь прайса из данных которые уже в базе.
Удалось применить старый, как 1С:7.7. под ход — вывод по строкам, с помощью функций.

function price_add_line( $obj_, $row_, $str )
{
   $obj_->setActiveSheetIndex(0)->setCellValue("A{$row_}", ic( " " . html_entity_decode($str) ) );
   $obj_->getActiveSheet()->mergeCells("A{$row_}:I{$row_}");
   $row_++;
   return $row_;               
}

В самом «документ—генераторе», просто достаточно делать вызов формирователя этой «линии»:

//set header style
   $row_ = 1;
 
... тут - вывод шапки прайса
 
   $row_ = price_add_line( $oexcell, $row_, term_translate( "price_header", $lang_ )  );
 
... тут - вывод строк прайса
 
   $row_ = price_add_line( $oexcell, $row_, term_translate( "price_footer", $lang_ )  );
 
... доп операции
 
  if ( $version_ == 5 )
  {
      $ext_ = ".xls";
      $objWriter = PHPExcel_IOFactory::createWriter($oexcell, 'Excel5');
  }
  elseif ( $version_ == 2007 )
  {
      $ext_ = "excell2007.xlsx";
      $objWriter = PHPExcel_IOFactory::createWriter($oexcell, 'Excel2007');
  }
  else
      die( "Undefined version: " + $version_ );
 
... Вывод в браузер :
 
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");;
        header("Content-Disposition: attachment;filename=$filename ");
        header("Content-Transfer-Encoding: binary ");
 
        $objWriter->save("php://output");

Получилось очень неплохо, в особенности если учесть, что удалось сформировать прайс в обоих форматах ексела, единственно поменяв конечный метод. использующий для вывода файла.

Единственная загвоздка получилась с phpexcell и моими версиями интерпретаторов. Оказалось , что одна из версий ПХП как-то интересно работает с временными файлами, в итоге пришлось обновлять скрипт, хорошо, что разработчик excell уже исправил этот досадный «баг».

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *