PHP PEAR Spreadsheet_Excel_Writer отправляет пустой файл - PullRequest
2 голосов
/ 14 октября 2008

Кто-нибудь использовал Груша: Spreadsheet_Excel_Writer ?

В руководстве по форматированию перечислены сценарии, аналогичные тем, с которыми я работаю: (обрезано)

<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();

$worksheet =& $workbook->addWorksheet();
$worksheet->write(0, 0, "Quarterly Profits for Dotcom.Com");

$workbook->send('test.xls');
$workbook->close();
?>

Что я думаю, что понимаю до сих пор об этом ...
$workbook->send('test.xls'); устанавливает заголовки для передачи файлов Excel. Теперь, похоже, никаких ошибок не возникает, но загруженный файл полностью пуст (даже в шестнадцатеричном редакторе).

Итак ...
Где (в каком классе / методе) должен быть записан двоичный файл $workbook? Или я все это неправильно понимаю?

Примечание : честно говоря, я не знаю, какая версия Spreadsheet_Excel_Writer используется; источники не содержат такой полезной информации.
Я могу сказать вам, что авторское право составляет 2002-2003 ; итак, от версии 0.1 до 0.6.

[ Edit ] Извините, думал, что я где-то упомянул об этом .. Это чей-то скрипт, который мне поручили исправить.

Ответы [ 5 ]

3 голосов
/ 14 октября 2008

Вот пример кода:

<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer('test.xls');
$worksheet =& $workbook->addWorksheet('My first worksheet');
if (PEAR::isError($worksheet)) {
    die($worksheet->getMessage());
}
$workbook->close();
?>

Я думаю, для начала, дайте вашему листу имя и попробуйте написать файл напрямую (без send()).

Кроме того, убедитесь, что для всех методов, которые вы вызываете, проверьте ответ с помощью PEAR::isError().

1 голос
/ 20 января 2011

Не очень понятно, но я думаю, что команда send создает только заголовки с правильным типом содержимого и именем файла. Вы должны отправить данные потом, с чем-то вроде

$tmpDocument = '/path/to/tmp/file.xls';
$workbook = new Spreadsheet_Excel_Writer($tmpDocument);   

/ * Код для создания файла XLS * /

$workbook->close();
$workbook->send('Report.xls');
readfile($tmpDocument);
0 голосов
/ 15 октября 2009

Вам нужно назвать свой рабочий лист на $worksheet =& $workbook->addWorksheet();.
Проверьте код ниже:

require_once 'Spreadsheet/Excel/Writer.php';

//Create a workbook
$workbook = new Spreadsheet_Excel_Writer(); //() must be empty or your downloaded file will be corrupt.

// Create a worksheet 
$worksheet =& $workbook->addWorksheet('test'); <-- You forgot to name your worksheet in your code, yours is "addWorksheet()"

// The actual data 
$worksheet->write(0, 0, 'Name'); 
$worksheet->write(0, 1, 'Age'); 
$worksheet->write(1, 0, 'John Smith'); 
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31); $worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);

// send HTTP headers 
$workbook->send('prueba.xls');

// Let's send the file
$workbook->close();
0 голосов
/ 24 августа 2009

Используйте это, чтобы загрузить лист в вашем браузере

$workbook = new Spreadsheet_Excel_Writer(); // <-- leave parantheses empty
$workbook->send($DownloadFileName);
// Your fancy spreadsheet generating code
$workbook->close();

и это, чтобы записать его в файл.

$workbook = new Spreadsheet_Excel_Writer($SaveFileName);
// Your fancy spreadsheet generating code
$workbook->close();
0 голосов
/ 14 октября 2008

send () отправляет заголовки управления кэшем и заголовки типов контента, но не контент. Контент передается, как я понимаю из кода, при вызове $ workbook-> close ().

...