Автор Тема: Excel средствами PHP  (Прочитано 11085 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« : 29 Января 2009, 14:42:17 »
Тема заезженная, но все же...
С помощью метода, описанного здесь собрал чтото типа:

//создаем новый объект COM – excel.application 
$xls = new COM("excel.application");
// Скрываем приложение MS Excel
$xls->Application->Visible 0;
//Создаем новую книгу 
$wkb $xls->Workbooks->Add(); 
// Выбрали ячейку A1
$range=$xls->Range("A1");
// Вставили значение
$range->Value "Hello";
//Сохраняем документ
$wkb->SaveAs("C:/file.xls");
//Завершаем работу с MS Excel
$wkb->Close(false);
$xls->Workbooks->Close();
$xls->Quit();
unset(
$sheet);
unset(
$xls);


А сейчас вопрос:
Мне не надо сохранять файл на локальном диске С:
Мне необходимо выдать сгенерированный файл в браузер клиента, вернее в браузере клиента должен открыться диалог на сохранение файла.

Всевозможные хидеры на подобие:

header
("Content-Disposition: attachment; filename=file.xls"); 
header("Content-Type: application/octet-stream\\r\\n"); 
header("Content-Type: application/force-download\\r\\n"); 
header("Content-Type: application/download\\r\\n");
header("Content-Transfer-Encoding: binary\\r\\n");

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

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Excel средствами PHP
« Ответ #1 : 29 Января 2009, 14:58:44 »
А application/vnd.ms-excel или как-то так если?

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« Ответ #2 : 29 Января 2009, 15:31:23 »
без изменений... :(

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« Ответ #3 : 29 Января 2009, 15:42:43 »
Но вот если я делаю какую-то ошибку то она отображается не в броузере, а в файле (который пустой).
Т.е. я так понимаю, не хватает какой-то одной командочки, которая работает наподобие $wkb->SaveAs("C:/file.xls"), но сохраняет данные не в файл на локальном диске, а во временный файл, который отправляется в броузер.
Пробовал методом подбора, типа $wkb->Send или $wkb->Output - не угадал...

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Excel средствами PHP
« Ответ #4 : 30 Января 2009, 16:31:05 »
Так напишите $wkb->Send сами, какие проблемы-то? Возьмите за образец $wkb->SaveAs и перепишите код так, чтобы метод не писал вывод в файл, а отправлял http-заголовок и вывод направлял в стандартный поток.

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« Ответ #5 : 30 Января 2009, 16:39:42 »
Цитировать
brainkiller:
Возьмите за образец $wkb->SaveAs и перепишите код

А где его переписывать? Я так понимаю где-то в скрипте COM-а, но где это находиться? Это не внешний класс, а встроеная функция PHP. Или я ошибаюсь?

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Excel средствами PHP
« Ответ #6 : 30 Января 2009, 18:15:35 »
Тьфу, блин!

header("Content-Type: application/vnd.ms-excel");
readfile(\'C:/file.xls\');

Как-то так? :)

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« Ответ #7 : 30 Января 2009, 19:09:29 »
Цитировать
brainkiller:
readfile(\'C:/file.xls\');


Я думал над этим вариантом, но пока отбросил его как запасной.
Для каждого клиента генерится СВОЙ файл. Необходимо будет следить за тем, скачал ли клиент себе файл, можно ли его уже удалять, имена файлов должны быть с разными именами и т.д.
Все это реализуемо и не сложно, но ведь должен быть вариант намного проще, о котором я и спрашиваю.

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Excel средствами PHP
« Ответ #8 : 30 Января 2009, 19:43:01 »
Скажем прямо, в исходном тексте топика об этом не было ни слова.

Можно, однако, присваивать случайное имя и отдавать на скачивание, а в самом начале скрипта удалять из соответствующей папки всё, что старше 15, скажем, минут.

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Excel средствами PHP
« Ответ #9 : 02 Февраля 2009, 12:14:27 »
Видимо, все-таки делать через файл. Я вот навскидку не помню у Excel.workbook метода, который бы отдал назад бинарник.

Либо - MSDN в помощь.

Есть третий вариант - сделать выдачу xl-я через spreadsheetml (что еще и кроссплатформенно, кстати), но тут минимальная версия xl - XP (2002).
LJ: Backslashed life (rss)

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« Ответ #10 : 04 Февраля 2009, 15:02:33 »
Цитировать
brainkiller:
Можно, однако, присваивать случайное имя и отдавать на скачивание, а в самом начале скрипта удалять из соответствующей папки всё, что старше 15, скажем, минут.

Наверное, пойду этим путем. Еще подумаю, как создавать файл со случайным именем, а клиенту отдавать с нормальным. Вроде бы как-то с помощью хидеров можно...

Оффлайн ojober

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.beach-hotel.ru/
Excel средствами PHP
« Ответ #11 : 13 Февраля 2009, 01:06:07 »
Я даже не знал что такое можно сделать.

Оффлайн Pirxus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.hotelmare.ru/
Excel средствами PHP
« Ответ #12 : 14 Февраля 2009, 17:52:50 »
этот способ генерации excel файла через COM так понимаю? а если сервре крутится под линуксом, такое ведь не поканает? или я ошибаюсь??

Оффлайн zuko

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
Excel средствами PHP
« Ответ #13 : 16 Февраля 2009, 09:49:55 »
Цитировать
Pirxus:
этот способ генерации excel файла через COM так понимаю? а если сервре крутится под линуксом, такое ведь не поканает? или я ошибаюсь??

Правильно понимаете - только под виндой.

Оффлайн Cleanserg

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.neny.ru/
Excel средствами PHP
« Ответ #14 : 19 Февраля 2009, 12:24:34 »
Жалко что только под виндой.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28