Автор Тема: Странности со SpreadSheet::WriteExcel  (Прочитано 4348 раз)

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

Оффлайн el-vis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Странности со SpreadSheet::WriteExcel
« : 30 Августа 2005, 14:11:38 »
Всем привет, столкнулся с проблемой, решаю второй день :)
 Буду очень благодарен, если подскажете хотя бы куда копать.
 
   У меня на сайте стоит формирование xls прайса из таблицы mysql с помощью SpreadSheet::WriteExcel. Со вчерашнего дня скрипт стал присылать файлы, которые не хотят открываться.

Опытным путем установил что если размер меньше 9 килобайт то все окей, если больше то идет какое-то переполнение и файл вроде как перезаписывается заново, в итоге больше 9 кб. не приходит.


Копаю в сторону параметров для stdout но пока ничего не нашел.

  Очень надеюсь на дельный совет :)


  Вот мой код:

#!/usr/bin/perl

use DBI;
use Spreadsheet::WriteExcel;
use Unicode::Map();
my $filename ="ost4.xls";
print "Content-type: application/vnd.ms-excel\\n";
print "Content-Disposition: attachment; filename=$filename\\n";
print "\\n";

&gen_price;

sub gen_price {


my $dbh = DBI->connect(\'DBI:mysql:**,**,**)  or die ("Unable to connect");

  my $i = 0;
   my $map = new Unicode::Map("WINDOWS-1251");

   my $workbook = Spreadsheet::WriteExcel->new("-");
   my $worksheet  = $workbook->addworksheet("xls");

   $worksheet->set_column(\'A:A\', 15);
   $worksheet->set_column(\'B:B\', 40);
   $worksheet->set_column(\'C:C\', 10);

   my $sql = "select id, name, price from xls";
   my $res = $dbh->prepare($sql) or die("Unable to prepare sql");
   my $rc = $res->execute();

  while(my ($id, $name, $price) = $res->fetchrow_array())  {

   $worksheet->write_unicode($i,0,$map->to_unicode($id));
   $worksheet->write_unicode($i,1,$map->to_unicode($name));
   $worksheet->write_unicode($i,2,$map->to_unicode($price));

  }
$dbh->disconnect();
$res->finish();
$workbook->close();
 }
« Последнее редактирование: 30 Августа 2005, 14:34:13 от el-vis »

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Странности со SpreadSheet::WriteExcel
« Ответ #1 : 30 Августа 2005, 15:46:09 »
perldoc -f binmode ?
0 OK, 0:1

Оффлайн el-vis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Странности со SpreadSheet::WriteExcel
« Ответ #2 : 31 Августа 2005, 14:28:26 »
посмотрел binmode, как понял он для переключения потока на бинарный и текстовый, Spreadsheet::WriteExcel->new по докам автоматом в бинарном пишет, пробовал binmode (stdOut) не хочет.
 Как бы не оказалось какой-то перл проблемой...
 Уже написал скрипт который просто текст загоняет в файл. Меньше 9 кб - нормально, если больше - записывает по кругу :)

 Пробовал создавать файлы любого объема - создаются без проблем. Проблема именно с writeExcel.
« Последнее редактирование: 31 Августа 2005, 16:24:04 от el-vis »

Оффлайн РИК

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Странности со SpreadSheet::WriteExcel
« Ответ #3 : 24 Сентября 2005, 08:04:40 »
Посмотри здесь:

http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.15/lib/Spreadsheet/WriteExcel/WorkbookBig.pm

думаю, что это все решит.

 

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