DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   Export to Excel (PDF) (http://www.devprotalk.com/showthread.php?t=11143)

slavkan 01. 08. 2012. 18:28

Moze li ovako da se to skucka, nesto sam na brzinu pokusao:

Kôd:

<?php
/**
  * Export an array as downladable Excel CSV
  * @param array  $header
  * @param array  $data
  * @param string  $filename
  */
 
 
  include('include/config.php');       

  function toCSV($header, $data, $filename) {
    $sep  = "\t";
    $eol  = "\n";
    $csv  =  count($header) ? '"'. implode('"'.$sep.'"', $header).'"'.$eol : '';
    foreach($data as $line) {
      $csv .= '"'. implode('"'.$sep.'"', $line).'"'.$eol;
    }

    header('Content-Description: File Transfer');
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename='.$filename.'.csv');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    $csv = chr(255) . chr(254) . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
        header('Content-Length: '. strlen($csv));
        echo $csv;
    exit;
  }
         
  $select = "SELECT * from radnik where pozicija ='Uprava' ";
  $export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );
  $fields = mysql_num_fields( $export );
  for ( $i = 0; $i < $fields; $i++ )
        {
                $header .= mysql_field_name( $export , $i ) . "\t";
        }
 
        while( $row = mysql_fetch_row( $export ) )
        {
                $line = '';
                foreach( $row as $value )
                {                                           
                        if ( ( !isset( $value ) ) || ( $value == "" ) )
                        {
                                $value = "\t";
                        }
                        else
                        {
                                $value = str_replace( '"' , '""' , $value );
                                $value = '"' . $value . '"' . "\t";
                        }
                        $line .= $value;
                }
                        $data .= trim( $line ) . "\n";
        }
                        $data = str_replace( "\r" , "" , $data );
 
                if ( $data == "" )
                {
                        $data = "\n(0) Pronadjeno zapisa!\n";                       
                }
               
                  $filename='test';
                  toCSV($header, $data,$filename);
 
 
  ?>


Br@nkoR 01. 08. 2012. 20:08

Funkcija toCSV za prva dva argumenta ($header i $data) očekuje nizove, a ti joj prosleđuješ stringove

slavkan 03. 08. 2012. 13:54

Ajde sacekacemo sta @ivanhoe kaze, mozda ovo moze jednostavnije da se resi bez ovog mog komplikovanja.

ivanhoe 03. 08. 2012. 22:41

pa nemam sta da kazem, funkcija je ok, nego joj ne prosledjujes dobro podatke, ovo sto ti branko rece...

Probaj ovako:
PHP kôd:

function toCSV($header$data$filename) {
    
$sep  "\t";
    
$eol  "\n";
    
$csv  =  count($header) ? '"'implode('"'.$sep.'"'escape_csv($header) ).'"'.$eol '';
    foreach(
$data as $line) {
      
$csv .= '"'implode('"'.$sep.'"'escape_csv($line) ).'"'.$eol;
    }
    
    
header('Content-Description: File Transfer');
    
header('Content-Type: application/vnd.ms-excel');
    
header('Content-Disposition: attachment; filename='.$filename.'.csv');
    
header('Content-Transfer-Encoding: binary');
    
header('Expires: 0');
    
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    
header('Pragma: public');
    
$csv chr(255) . chr(254) . mb_convert_encoding($csv'UTF-16LE''UTF-8');
    
header('Content-Length: 'strlen($csv));
    echo 
$csv;
    exit;
}

function 
escape_csv(array $row) {
    
$sep  "\t";
    
$eol  "\n";

    return 
str_replace(array($sep$eol'"'), array(' '' ''\"'), $row);
}

$select "SELECT * from radnik where pozicija ='Uprava' ";
$export mysql_query$select ) or die ( "Sql error : " mysql_error( ) );
$fields mysql_num_fields$export );

$header $data = array();

for ( 
$i 0$i $fields$i++ )
{
    
$header[] = mysql_field_name$export $i );
}

while( 
$row mysql_fetch_row$export ) )
{
    
$data[] = $row;
}

if ( !
$data )
{
    
$data "\n(0) Pronadjeno zapisa!\n";                        
}
$filename='test';

toCSV($header$data$filename); 

mada bi ovo trebalo gurnuti u klasu zapravo...

slavkan 04. 08. 2012. 15:04

@ivanhoe hvala sto se trudis.
Kad pokrenem ovaj skript napravi mi se .csv fajl koji sadrzi poruku o gresci:

Kôd:

Invalid argument supplied for foreach() on line 17
a na liniji 17 je sledece:

Kôd:

foreach($data as $line)
{
      $csv .= '"'. implode('"'.$sep.'"', escape_csv($line) ).'"'.$eol;
}

Zar ovaj deo gde pravim header[] i data[] ne bi trebao da ide na vrh skripta ?

Br@nkoR 04. 08. 2012. 15:46

Možda upit ne pronađe nijedan rezultat u bazi pa ovo stvara problem:
PHP kôd:

$data "\n(0) Pronadjeno zapisa!\n"

zameni sa:
PHP kôd:

$data[] = ["(0) Pronadjeno zapisa!"]; 

odnosno:
PHP kôd:

$data[] = array("(0) Pronadjeno zapisa!"); 

U zavisnosti koju verziju PHP-a koristiš.

slavkan 04. 08. 2012. 18:30

Da problem je bio kad nema ni jednog zapisa u bazi. Koristio sam ovja drugi nacin i evo mi sadrzaja test.csv fajla (Jedan red izgleda ovako):


Kôd:

"262""  ""Ilija""  ""Ivkovi?""  ""HET1""        ""Nepoznato""        ""222""        ""Nepoznato""        ""Nepoznato""        ""222""        ""06512345679""        ""IIvkogiv@mail.net"""
Znaci nema slova ć u prezimenu.

Br@nkoR 05. 08. 2012. 16:30

Ne znam, kada testiram kod sebe radi, pokušaj da izvršiš upit posle izvršene konekcije:
PHP kôd:

mysql_query("set names 'utf8'"); 

Proveri i charset servera.
Pogledaj i ovo:
http://www.mysql.rs/2010/07/smece-u-...-zna-koji-put/

slavkan 10. 08. 2012. 10:00

Citat:

Originalno napisao Br@nkoR (Napišite 108033)
Ne znam, kada testiram kod sebe radi, pokušaj da izvršiš upit posle izvršene konekcije:
PHP kôd:

mysql_query("set names 'utf8'"); 

Proveri i charset servera.
Pogledaj i ovo:
http://www.mysql.rs/2010/07/smece-u-...-zna-koji-put/

Malo sambio odsutan pa sam tek juce ovo testirao i napokon radi nakon sto sam odradio set names ut8. Hvala puno za ovo.


Pokusavao sam malo da unapredim skript pa recimo da hocu da mi se ovaj export desava na klik dugmeta i uradio sledece:

Kôd:

<html>
<body>
//Select lista samo za jednu opciju
<?php echo'<form method="POST" action="'.$_SERVER['PHP_SELF'].'">
<select name="pozicija">
 <option value="Uprava">Uprava</option>
 <input type="submit" name="submit" value="export">
</select>
</form>';?>
</body>
</html>


<?php
if (isset($_POST['submit']))
{
$select = "SELECT *from radnik where pozicija ='Uprava' ";
$export = mysql_query( $select ) or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields( $export );

$header = $data = array();

for ( $i = 0; $i < $fields; $i++ )
{
    $header[] = mysql_field_name( $export , $i );
}

while( $row = mysql_fetch_row( $export ) )
{
    $data[] = $row;
}

if ( !$data )
{
    $data[] = array("(0) Pronadjeno zapisa!");                     
}
$filename='test';

toCSV($header, $data, $filename); 
}
?>

Naravno ovo je samo pokazni primer, ja cu na dalje da imam vise opcija u select listi a u sql upit cu da sa $_POST['pozicija'] prosledjujem koja opcija je izabrana da bi on znao sta da mi vrati. E kad za ovaj pokazni primer kliknem submit on meni napravi csv fajl ali sa gomilom smeca, enkoding ne radi + jos vrati mi celi html kod od ove select liste. Imena kolona iz mysql tabele nisu uopste upisana u kolone csv fajla kako valja, sva imena su u jednoj celiji i pod navodnicima. Umesto slova sa kvakicom je ogromna tacka, a mnogo imena i prezimena su odsecena. Npr:

Kôd:

"Sinisa        ""Kova"                       
"evi""        ""HET1""        ""14""        ""227""        """"        """"        """"        """"        ""SKovacevic@net.com"""

Ovde ne mogu da se vide te tacke, ali u csv fajlu postoje. Kao sto vidite sve je razbacano.

Br@nkoR 10. 08. 2012. 10:44

Štampaš html kod pre cvs podataka.
PHP kôd:

<?php
if (isset($_POST['submit'])) 
{
$select "SELECT *from radnik where pozicija ='Uprava' ";
$export mysql_query$select ) or die ( "Sql error : " mysql_error( ) );
$fields mysql_num_fields$export );

$header $data = array();

for ( 
$i 0$i $fields$i++ )
{
    
$header[] = mysql_field_name$export $i );
}

while( 
$row mysql_fetch_row$export ) )
{
    
$data[] = $row;
}

if ( !
$data )
{
    
$data[] = array("(0) Pronadjeno zapisa!");                       
}
$filename='test';

toCSV($header$data$filename);  
} else {
?>
<html>
<body>
//Select lista samo za jednu opciju
<?php echo'<form method="POST" action="'.$_SERVER['PHP_SELF'].'">
<select name="pozicija">
 <option value="Uprava">Uprava</option>
</select>
<input type="submit" name="submit" value="export">
</form>'
;?>
</body>
</html>
<?php ?>



Vreme je GMT +2. Trenutno vreme je 14:35.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.