Код для генерации зависания листа Excel при запуске (с использованием PHPEXCEL) - PullRequest
1 голос
/ 22 марта 2011

У меня есть следующий код, который должен генерировать лист Excel для меня с использованием PHPExcel, но проблема в том, что для его запуска требуется вечность.У меня также есть некоторый код Doctrine PHP.Код Doctrine соединяется с БД и выбирает данные, которые я хочу использовать для заполнения файла Excel.Ниже приведен код.Пожалуйста, может кто-нибудь сказать мне, что не так

<code>


<p>/** Error reporting */
error_reporting(E_ALL);</p>

<p>if (!isset($_SESSION)) {
 // session_name("mediapp123456");
  session_start();
}</p>

<p>require_once ('bootstrap.php');
$conn = Doctrine_Manager::connection ( DSN );</p>

<p>$q = Doctrine_Query::create()
    ->select('u.*')
    ->from('UserQuestionnaire u')
    ->orderBy('u.id DESC');
$row = $q->execute();</p>

<p>date_default_timezone_set('Europe/London');</p>

<p>/** PHPExcel */
require_once 'excelreports/Classes/PHPExcel.php';</p>

<p>// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();</p>

<p>// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Ifeanyi Agu")
                             ->setLastModifiedBy("Ifeanyi Agu")
                             ->setTitle("QUSER")
                             ->setSubject("QUSER")
                             ->setDescription("QUser Generated Document")
                             ->setKeywords("xml")
                             ->setCategory("Test result file");</p>

<p>// Add some data
echo date('H:i:s') . " Add some data\n";</p>

<p>$objPHPExcel->getActiveSheet()->mergeCells('B2:F2')
                                ->mergeCells('G2:K2')
                            ->setCellValue('I2', 'FEATURES')
                                ->mergeCells('L2:AI2')
                                ->setCellValue('W2', 'EXPECTATION')
                                ->mergeCells('AJ2:BG2')
                                ->setCellValue('AU2', 'PERCEPTION')
                                ->mergeCells('L3:03')
                                ->setCellValue('M', 'Tangible'); </p>

<p>$objPHPExcel->getActiveSheet()->setCellValue('A4', 'No')
->setCellValue('B4', 'School')
->setCellValue('C4', 'Dept')
->setCellValue('D4', 'Status')
->setCellValue('E4', 'Browse')
->setCellValue('F4', 'How Long')
->setCellValue('G4', 'Tangibility')
->setCellValue('H4', 'Reliability')
->setCellValue('I4', 'Assurance')
->setCellValue('J4', 'Responsive')
->setCellValue('K4', 'Empathy')
->setCellValue('L4', 'E1')
->setCellValue('M4', 'E2')
->setCellValue('N4', 'E3')
->setCellValue('O4', 'E4')
->setCellValue('P4', 'E5')
->setCellValue('Q4', 'E6')
->setCellValue('R4', 'E7')
->setCellValue('S4', 'E8');</p>

<p>$i=4;
foreach($row as $rows)
{
$i++;<br>
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, ($i-4))
                                ->setCellValue('B'.$i, $rows->schoolname)
                                ->setCellValue('C'.$i, $rows->department)
                                ->setCellValue('D'.$i, $rows->status)
                                ->setCellValue('E'.$i, $rows->doyoubrowse)
                                ->setCellValue('F'.$i, $rows->browselength);</p>

<p>}</p>

<p>// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);</p>

<p>// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', <strong>FILE</strong>));</p>

<p>// Echo memory peak usage
echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB\r\n";</p>

<p>// Echo done
echo date('H:i:s') . " Done writing file.\r\n";</p>

<p>?> 

1 Ответ

0 голосов
/ 22 марта 2011

Очевидные возможности:

->mergeCells('L3:03')

подозревают, что это должно быть O3 (буква O, строка три), а не 03 (цифра ноль три)

->setCellValue('M', 'Tangible'); 

может быть причинойнекоторые проблемы «M» - это ссылка на столбец, а не ссылка на ячейку

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

->mergeCells('G2:K2')
->setCellValue('G2', 'FEATURES')

вместо

->mergeCells('G2:K2')
->setCellValue('I2', 'FEATURES')
...