php a excel

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod johnj 24. 11. 2007 20:29

ahoj nepozeral som este nikde na nete lebo ked niekto vie tak poradi a doporuci, je mozne generovat Excel cez PHP aj s vyuzivanim vzorcov v Excely atd...?
teda ze vygenerujem dokument, ktory mi bude robit sumu z policok po editacii v excely atd...
diky moc
Inspiron 6400, T5500, 2x512 667MHz DDRII, 120GB 5400ot, TL 1440x900, 9 cell, ATIx1400
johnj
Junior

Odeslat příspěvekod Caderom 24. 11. 2007 20:51

Přímo XLS soubor generovat nemůžeš, můžeš ale generovat CSV. CSV nemá žádné formátování, využívá základní. Jednotlivé buňky jsou odděleny v řádku nejčastěji středníkem, další řádek v souboru znamená další řádek v Excelu. Pokuď je v buňce vzorec, tak ho Excel vezme.

Př.
CSV generované pomocí PHP
Kód: Vybrat vše
6;4
2;2
=A1+A2;=B1-B2

CSV zobrazené v Excelu
Kód: Vybrat vše
[A][B]
[1]6 4
[2]2 2
[3]4 2 (vzorec zůstává)[/c
Caderom
Pokročilý
Uživatelský avatar

Odeslat příspěvekod johnj 24. 11. 2007 23:00

dik no ja potrebujem priamo XLS s formatovanim a tak.
preco myslis ze to nejde?
napr PDF ide myslim ze aj XLS musi ist...len najst vhodny nastroj
uz len napr tu sa pozri
http://www.paggard.com/projects/xls.generator/
to je ale platene
Inspiron 6400, T5500, 2x512 667MHz DDRII, 120GB 5400ot, TL 1440x900, 9 cell, ATIx1400
johnj
Junior

Odeslat příspěvekod Caderom 24. 11. 2007 23:09

XLS je formát, který není čitelný v běžném textovém editoru, XLS tedy nelze vygenerovat pomocí základních funkcí PHP. V tomto případě ta firma nejspíš naprogramovala vlastní komponentu spolupracující s PHP.

PDF je zpracováváno také pomocí externí knihovny, PHP předá informace a PDF knihovna to pak zpracuje. Na XLS ale žádná volně dostupná knihovna (asi) neexistuje.
Naposledy upravil Caderom dne 24. 11. 2007 23:12, celkově upraveno 1
Caderom
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Matajon 24. 11. 2007 23:11

Tady bych spíš volil export do nového formátu OpenXML - .xslx ... http://www.root.cz/clanky/export-open-xml-php/
Matajon
Junior

Odeslat příspěvekod Caderom 24. 11. 2007 23:29

Jo, to bude nejlepší řešení.

Mylně jsem se domníval, že XML podporuje až Office XP, čímž by se omezilo jeho použití, ale podporu už má i Office 2000, takže by to mělo fungovat téměř na všech PC.
Caderom
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Z@chi 25. 11. 2007 00:57

Tohle jsem si napsal uz kdysi davno pro export, tetka uz to nepouzivam, ale snad je to funkcni:

Kód: Vybrat vše
   class  Excel extends connect
   {
         public  $data = false;     
         public  $name; 
            public  $table;
     

     function  __construct($table, $name='zaachi')
        {
      parent::__construct();
      $this->data="";      
      $this->name=$name;
      if(!eregi(".xls", $this->name))
      $this->name .= '.xls';
      $this->table = $table;
      self::zacatek();
      self::vypis();
      self::zobraz();
        }
     
        function zacatek()
        {
           $this->data = pack("vvvvvv", 0x809, 0x08, 0x00,0x10, 0x0, 0x0);
         }


        function cislo($x, $y, $val = 1)
        {
           $this->data .= pack("vvvvv", 0x0203, 14, $x, $y, 0x00);
           $this->data .= pack("d", $val);
        }

          
        function pis($x = 1, $y = 1, $val = "a")
        {
           $l = strlen($val);
               //$this->data .= pack("v", 0x0190);
           $this->data .= pack( "v*", 0x0204, 8 + $l, $x, $y, 0x00, $l);
           $this->data .= $val;
        }
     
        function konec()
        {
          $this->data .= pack("vv", 0x0A, 0x00);
        }
         
        function zobraz()
        {       
           self::konec();
           header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT");
           header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
           header ( "Pragma: no-cache" );
           header ( "Content-type: application/octet-stream; name=$this->name" );
           header ( "Content-Disposition: attachment; filename=$this->name");
           header ( "Content-Description: sqltoxls" );
           print $this->data;
        }
         
         
      function error($str = "error")
     {
      echo "<b>" . $str . "</b>";
      die();
      }
      
   function vypis()
   {
   $num = (mysql_query("SELECT * FROM " . $this->table . " LIMIT 1", $this->link));
   $pocet_sloupcu = count(mysql_fetch_row($num));

    $select = "SELECT * FROM " . $this->table . " WHERE 1";
    $pocet = mysql_num_rows($data = mysql_query($select, $this->link));
    for($i = 0; $i < $pocet; $i++)
    for($j = 0; $j<$pocet_sloupcu; $j++)
    {
     if(is_numeric( mysql_result($data, $i, $j) ))
         self::cislo($i, $j, mysql_result($data, $i, $j));
      else
        self::pis($i, $j, mysql_result($data, $i, $j));
    }
   }
   }

new Excel($_GET['table'], $_GET['table']);

Treba to pomuze
Z@chi
Junior
Uživatelský avatar

Odeslat příspěvekod neonn 26. 11. 2007 19:47

Generovat XLS soubor samozrejme jde... tady je nejaka jedna knihovna (ale potrebuje mit PEAR)
http://pear.php.net/package/Spreadsheet_Excel_Writer
...pak mam jeste skoro tu samou, ale oskanou o nutnost mit PEAR. Ale uz ji nemuzu nikde na netu najit... tak kdybys ji potreboval, staci se ozvat.
Zakladni formatovani bunek to sice umi, ale vzorce jsem s tim nezkousel... snad na to prijdes.

EDIT: Tak tu verzi pro pouziti i bez PEARu mas v SZ... neni to sice idealni, generovat si XLS timhle zpusobem, ale na jednoduche veci to staci... zakladni formatovani tam je.
Before talking crap about someone, check the room... :)
SH*T HAPPENS! :)
neonn
Junior
Uživatelský avatar

Odeslat příspěvekod johnj 26. 11. 2007 22:09

ahoj dik za odpovede, no moc ste ma nepotesili :)
cize neexistuje nic take ako napr fpdf.org ale pre excel?

inak mam uz spravene generovanie do PDF, no teraz potrebujem aj pre Excel...

co je to SZ? :)
Inspiron 6400, T5500, 2x512 667MHz DDRII, 120GB 5400ot, TL 1440x900, 9 cell, ATIx1400
johnj
Junior

Odeslat příspěvekod vlastagf 27. 11. 2007 22:50

a co kody na export z OpenOffice do MS Excel? OO balik to umi a je to open source, tak treba si s tim uz nekdo hral...
vlastagf
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků