Skocz do zawartości
Zaloguj się, aby obserwować  
Causen

[PEAR] Spreadsheet_Excel_Writer - pusty plik.

Polecane posty

Witam, może ktoś zetknął się już tym i będzie umiał mi pomóc. Problem polega na tym, że generuje mi się pusty plik excela ;/ (20b). Po przewertowaniu kilkudziesięciu stron z tym problemem poddaje się, wszędzie piszą że należy utworzyć folder na pliki tymczasowe jednak niespecjalnie wiadomo gdzie, nadać mu chmod 777 i powinno działać. Nie działa, próbowałem na wszystkie możliwe kombinacje,

 

Dodałem zatem do skryptu

$workbook->setTempDir('/home/user/domains/domena/public_html/katalog/modules/Reports/temp/');

 

katalog temp znajduje się w tym samym katalogu co skrypt. nadałem chmody 777 - wygenerowany plik dalej jest pusty... :/

 

Ostatnie co znalazłem to taka informacja

It appears as if you don't have permissions for writing to the system's temp

dir. Please try this:

 

$workbook->setTempDir("/some/dir/you/have/permissions/on");

thanks for the help! I had to change the TempDir for the OLE-root and

OLE-file.

 

Jako że utworzenie katalogu i nadanie mu chmoda 777 nic nie zmieniło, gdzie i jak mogę TempDir dla OLE-root i OLE-file? Anyone?

 

Przy okazji, czy miejsce w którym zainstalowany jest pear i Spreadsheet_Excel_Writer ma jakieś znaczenie? (u mnie znajduje się w

/usr/local/php5/lib/php/Spreadsheet/Excel/

a w skrypcie umieszczone jest

require_once("Spreadsheet/Excel/Writer.php");

 

Próbowałem też przekopiować katalog spreadsheet do katalogu z którego wykonywany jest skrypt, wszystko na darmo :/

Edytowano przez Causen (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja używam tego i bez problemu mi generuje pliki xls-a (nawet bez kombinowanie z katalogiem tymczasowym).

 

Pokaż kod tak jak pisał xorg, wtedy zobaczymy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
<?php

global $php_max_execution_time;
set_time_limit($php_max_execution_time);
# require_once("include/php_writeexcel/class.writeexcel_workbook.inc.php");
# require_once("include/php_writeexcel/class.writeexcel_worksheet.inc.php");
require_once("Spreadsheet/Excel/Writer.php");
require_once("modules/Reports/ReportRun.php");
require_once("modules/Reports/Reports.php");
global $tmp_dir, $root_directory;
# $fname = tempnam($root_directory.$tmp_dir, "merge2.xls");
# $workbook = &new writeexcel_workbook($fname);
$workbook = new Spreadsheet_Excel_Writer();
$workbook->send('Test.xls');
$workbook->setVersion(8);
$worksheet =& $workbook->addWorksheet();
$worksheet->setInputEncoding('utf-8');
# Set the column width for columns 1, 2, 3 and 4
$worksheet->setColumn(0, 3, 15);
# Create a format for the column headings
$header =& $workbook->addFormat();
$header->setBold();
$header->setSize(12);
$header->setColor('blue');
# Write out the data
$reportid = vtlib_purify($_REQUEST["record"]);
$oReport = new Reports($reportid);
$filtercolumn = $_REQUEST['stdDateFilterField'];
$filter = $_REQUEST['stdDateFilter'];
$startdate = getDBInsertDateValue($_REQUEST['startdate']);
$enddate = getDBInsertDateValue($_REQUEST['enddate']);
$oReportRun = new ReportRun($reportid);
$filterlist = $oReportRun->RunTimeFilter($filtercolumn,$filter,$startdate,$enddate);
$arr_val = $oReportRun->GenerateReport("PDF",$filterlist);
$totalxls = $oReportRun->GenerateReport("TOTALXLS",$filterlist);
if(isset($arr_val))
{
foreach($arr_val[0] as $key=>$value)
{
 $worksheet->write(0, $count, $key , $header);
 $count = $count + 1;
}
$rowcount=1;
foreach($arr_val as $key=>$array_value)
{
 $dcount = 0;
 foreach($array_value as $hdr=>$value)
 {
  //$worksheet->write($key+1, $dcount, iconv("UTF-8", "ISO-8859-8", $value));
  $value = decode_html($value);
  //$worksheet->write($key+1, $dcount, utf8_decode($value));
  $worksheet->write($key+1, $dcount, $value);
  $dcount = $dcount + 1;
 }
 $rowcount++;
}
$rowcount++;
$count=1;
if(is_array($totalxls[0])) {
 foreach($totalxls[0] as $key=>$value)
 {
$chdr=substr($key,-3,3);
  $worksheet->write($rowcount, $count, $mod_strings[$chdr]);
  $count = $count + 1;
 }
}
$rowcount++;
foreach($totalxls as $key=>$array_value)
{
  $dcount = 1;
  foreach($array_value as $hdr=>$value)
  {
 //$worksheet->write($key+1, $dcount, iconv("UTF-8", "ISO-8859-1", $value));
 if ($dcount==1)
   $worksheet->write($key+$rowcount, 0, utf8_decode(substr($hdr,0,strlen($hdr)-4)));

 $value = decode_html($value);
 //$worksheet->write($key+$rowcount, $dcount, utf8_decode($value));
 //$worksheet->write($key+1, $dcount, iconv("UTF-8", "ISO-8859-8", $value));
 $worksheet->write($key+$rowcount, $dcount, $value);
 $dcount = $dcount + 1;
  }
}
}
$workbook->close();
//if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
//{
// header("Pragma: public");
// header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
//}
//header("Content-Type: application/x-msexcel");
//header("Content-Length: ".@filesize($fname));
//header('Content-disposition: attachment; filename="Reports.xls"');
//$fh=fopen($fname, "rb");
//fpassthru($fh);
//unlink($fname);
?>

Edytowano przez Causen (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na pierwszy rzut oka nie widzę jakiś błędów, przypuszczam, że może coś źle generujesz do arkusza i dlatego jest pusty.

 

Proponuję żebyś na start sprawdził pierwszy przykład z manuala http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.intro.php

Jeżeli zadziała to szukaj błędu w tych pętlach jeżeli nie to sprawdź co zwraca metoda close()

returns true on success, PEAR_Error on failure

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×