Spreadsheet_Excel_Writer получить содержимое файла - PullRequest
0 голосов
/ 31 июля 2010

Мне нужно прикрепить XLS-файл к электронной почте через PHP.Проблема в том, что Spreadsheet_Excel_Writer отправляет заголовок HTTP в браузер, а затем содержимое.Spreadsheet_Excel_Writer API не имеет каких-либо функций, таких как get_content, чтобы напрямую стать содержимым файла.Я не хочу сначала сохранять файл, я просто хочу перепрыгнуть через этот шаг, сохраняя содержимое непосредственно в виде вложения.Есть идеи?

Огромное спасибо.

Ответы [ 3 ]

4 голосов
/ 31 июля 2010

В Spreadsheet_Excel_Writer нет метода «записи в файл». Самое большее, вы можете отправить его напрямую клиенту с помощью метода ->send(). Это означает, что вы МОЖЕТЕ захватить вывод с помощью PHP буферизации вывода и захватить данные в виде строки, которую затем можно вставить в электронное письмо (например, через PHPMailer ->AddStringAttachment()).

Возможно, вы захотите исследовать переход на PHPExcel , поскольку Spreadsheet_Excel_Writer по сути мертв в воде, за исключением нескольких мелких исправлений. PHPExcel поддерживает Excel 2007, в то время как S_E_W застрял в Excel 5.0 (начало 90-х). Он также имеет метод ->save() для записи в файл.

3 голосов
/ 04 мая 2011
require_once 'Spreadsheet/Excel/Writer.php';

ob_start();

$workbook = new Spreadsheet_Excel_Writer();
$workbook->setVersion(8, 'utf-8');
$worksheet =& $workbook->addWorksheet('sheet 1');
$worksheet->setInputEncoding('utf-8');

$worksheet->write(0, 0, 'test');
$worksheet->write(1, 0, 'test2');

$workbook->close();

$sXls = ob_get_contents();

ob_end_clean();
0 голосов
/ 29 июня 2018

Хотя ОП не хочет сначала сохранять файл, я искал способ вывода inline, а не вложения, используя метод ::send.

Конструктор PEAR Spreadsheet_Excel_Writer 0.1 до 0.9.4 поддерживает аргумент $filename. [sic 0.1] и [sic 0.9.4]

При получении вызов метода Spreadsheet_Excel_Writer::close для созданного объекта приведет к выводу сгенерированной электронной таблицы вуказанный путь.

$workbook = new Spreadsheet_Excel_Writer('/path/to/output/file.xls');
//...
$workbook->close();

$data = file_get_contents('/path/to/output/file.xls'); 
//or file_get_contents($workbook->_filename);
unlink('/path/to/output/file.xls');
...