Forum Webscript.Ru
Программирование => Perl => Тема начата: el-vis от 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();
}
-
perldoc -f binmode ?
-
посмотрел binmode, как понял он для переключения потока на бинарный и текстовый, Spreadsheet::WriteExcel->new по докам автоматом в бинарном пишет, пробовал binmode (stdOut) не хочет.
Как бы не оказалось какой-то перл проблемой...
Уже написал скрипт который просто текст загоняет в файл. Меньше 9 кб - нормально, если больше - записывает по кругу :)
Пробовал создавать файлы любого объема - создаются без проблем. Проблема именно с writeExcel.
-
Посмотри здесь:
http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.15/lib/Spreadsheet/WriteExcel/WorkbookBig.pm
думаю, что это все решит.