Здравствуйте! С помощью кода: Спойлер PHP: ... require_once(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_vmpricelist'.DS.'assets'.DS.'classes'.DS.'phpexcel.php'); for ($ii = 1; $ii <= ceil(count($new_arr)/200);$ii++){ $this->data = array_slice($new_arr, ($ii-1)*200, 200); $excel = new PHPExcel(); $excel->setActiveSheetIndex(0); $active_sheet = $excel->getActiveSheet(); $active_sheet->getPagesetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); $active_sheet->getPagesetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); $active_sheet->setTitle('Прайс-лист'); $active_sheet->getColumnDimension("A")->setWidth(110); $active_sheet->getColumnDimension("B")->setWidth(180); $active_sheet->setCellValue("A1", 'Каталог изделий'); ... header("Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); $doc_name = "Content-Disposition:attachment;filename='document".$ii.".xls'"; header($doc_name);//говорим, что отправляй на скачивание $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $writer->save('php://output'); } exit(); чтобы файлы были небольшими и непустыми(наверно такое бывает из-за превышения каких-то лимитов на размеры файла) попытался сгенерировать несколько excel документов. Но в конце отработки скрипта на скачивание в браузер отдается только последний сгенерированный документ. Я неправильно написал код или в принципе на php нельзя организовать последовательное формирование и отправку на скачивание нескольких файлов друг за другом?
Что означает повторная отправка на скачивание можешь рассказать? Ты со своим клиентом как общаешься через веб-сервер, посредством чего? Ты отправил вывод нескольких: header(....);м в цикле в рамках одного ответа на клиентский запрос Что произойдет если на следующем шаге когда ты снова будешь пытаться заголовки запроса формировать в том же ответе? Что мешает отдать на загрузку сформированный архив с файлами?
Zuldek, доброе утро. Спасибо за отклик 1. Последовательное скачивание, не повторное. Вообщем надо скачать информацию в виде эксель документа. Поскольку если в него пихать всё за раз, он скачивается пустым. И вот я пытаюсь запихать информацию в несколько эксель файлов, для чего служит цикл со счётчиком $ii. Надо в общем получить либо один либо несколько файлов с всей информацией каким-то образом. 2. Второй вопрос не понял. Этот скрипт запускается, когда я клика. в админ панели сайта определенный пункт меню разрабатываемого мною расширения Joomla! 3. Ответ на ваш третий вопрос не знаю, просветите пожалуйста. Наверно будет как раз только последний файл отдаваться на скачивание. 4. А как тогда 1) сохранить эти файлы и 2)запихать их затем в архив с помощью php?
Спасибо. А откуда мне узнать содержимое файла, которое идет вторым параметром указанной вами функции? У меня есть переменная/объект $excel = new PHPExcel();
там у него есть метод а ля ->addFile куда передаешь путь до файла или содержимое, если оно в памяти. В чем проблема доку по паре методов прочитать? Кроме того, вполне возможно тебе достаточно просто в одном xlsx все документы на разных листах объединить, и не городить огороды. А расширение твое где в одном ответе пытаешься вернуть несколько заголовков и документов вернет тебе ошибку на втором шаге цикла где ты будешь пытаться вернуть клиенту очередные заголовки ответа сервера. Потому работать не будет.
Понятно, спасибо А как понять, может содержимое создаваемого файла действительно можно взять из памяти? Например, есть такой метод сохранения файла в PHPExcel: $writer->save('php://output'); Про output есть такая ремарка в документации: По ходу речь тут идет не про память?