PHP PEAR Spreadsheet_Excel_Writer отправляет пустой файл
-
11-07-2019 - |
Вопрос
Кто-нибудь пользовался Груша:Электронная таблица_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.
[Редактировать] Извините, мне показалось, я где-то упоминал об этом..Это чужой сценарий, который мне поручили исправить.
Решение
Вот несколько примеров кода:
<?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()
.
Другие советы
Это не очень понятно, но я думаю, что команда send создает только заголовки с правильным типом содержимого и именем файла.После этого вы должны отправить данные с чем-то похожим
$tmpDocument = '/path/to/tmp/file.xls';
$workbook = new Spreadsheet_Excel_Writer($tmpDocument);
/* Код для создания XLS-файла */
$workbook->close();
$workbook->send('Report.xls');
readfile($tmpDocument);
send() отправляет заголовки элементов управления кэшем и заголовки типов контента, но не содержимое.Содержимое отправляется, как я понимаю из кода, при вызове $workbook->close().
Используйте это, чтобы загрузить рабочий лист в свой браузер
$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();
Вам нужно назвать свой рабочий лист по адресу $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();