PHPExcel добавление HTML в XLS - PullRequest
       14

PHPExcel добавление HTML в XLS

2 голосов
/ 25 марта 2011

У меня есть страница, которая создает файл xls с PHPExcel на post, который работает нормально, загрузка файла всплывает и все становится золотым, но когда я пытаюсь открыть файл, я получаю сообщение об ошибке, говорящее, что excel не может открыть файл.Я проверил все входящие данные, и все было хорошо, поэтому я решил, что это должно быть что-то с файлом.

Я открыл загруженный xls в notepad ++, и, конечно же, там был HTML в верхней частифайл, тот же html для страницы, вплоть до того, где был вызван контент, и запускалась проверка php поста.Как только я удалил его, он открылся очень хорошо, все еще пропуская несколько полей, но я хотел бы сделать его действительно видимым, прежде чем беспокоиться об этом.

Вот мой код для создания xls

global $__CMS_CONN__;
error_reporting(E_ALL);
$listmem = $_SESSION['listmem'];
$evtdate1 = date('Y-m-d', strtotime('-1 year', strtotime(date('Y-m-d'))));
$evtdate2 = date('Y-m-d');
require_once('/web/content/wolf/plugins/Classes/PHPExcel.php');
$sql = "SELECT Count(*) AS number FROM (SELECT DISTINCT event_timestamp FROM membership_attendance_log WHERE event_timestamp >= '".$evtdate1."' AND event_timestamp <= '".$evtdate2."') as numevents";
$evtcount = $__CMS_CONN__->prepare($sql);
$evtcount->execute();
$count = $evtcount->fetchAll(PDO::FETCH_ASSOC);
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->mergeCells('A1:C1');
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Date Range: '.$evtdate1." to ".$evtdate2)
            ->setCellValue('D1', 'Total number of events: '.$count['number'])
            ->setCellValue('A2', 'Member')
            ->setCellValue('B2', 'Missed Meetings')
            ->setCellValue('C2', 'Attendance')
            ->setCellValue('D2', 'Business Name')
            ->setCellValue('E2', 'Title')
            ->setCellValue('F2', 'Phone')
            ->setCellValue('G2', 'Email');
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true);
$i = 3;
foreach($listmem as $row)
{
    $qry = "SELECT Count(membership_individual_id) AS attendance FROM membership_attendance_log WHERE membership_individual_id=".$row['id']." AND event_timestamp >= '".$evtdate1."' AND event_timestamp <= '".$evtdate2."'";
    $stmt = $__CMS_CONN__->prepare($qry);
    $stmt->execute();
    $attendance = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A'.$i, $row['first_name']." ".$row['last_name'])
                ->setCellValue('B'.$i, $attendance['attendance'])
                ->setCellValue('C'.$i, floor($attendance['attendance'] / $count['number']))
                ->setCellValue('D'.$i, $row['business_name'])
                ->setCellValue('E'.$i, $row['title'])
                ->setCellValue('F'.$i, $row['business_phone'])
                ->setCellValue('G'.$i, $row['email']);
    $i++;
}
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->setTitle('Report');
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Report-'.date("mdY").'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;

Это сайт, использующий wolfCMS, просто к вашему сведению.Я попытался вытащить его из файла и просто отправить в отдельный php-файл, но все равно получил то же самое.

1 Ответ

0 голосов
/ 24 мая 2012

Попробуйте добавить это непосредственно перед отправкой заголовка ob_end_clean(); Это должно решить вашу проблему.Я думаю, что некоторые данные в выходном буфере вызывают проблему.

...