Ankündigung

Einklappen
Keine Ankündigung bisher.

Speichern unter... geht nicht!!!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Speichern unter... geht nicht!!!

    Hi,

    ich möchte ein "Speichern unter..."-Menü in Zusammenhang mit COM und Excel realisieren, doch leider klappt das irgendwie nicht so ganz. Es geht zwar ein Speichern unter... auf, doch speichert es eine *.xls mit 1kB und nicht wie gewünscht meine erzeugte Datei mit 77kB!!!
    Hier mal der Code:
    Code:
    function export_excel($logs){
    //Instantiate the spreadsheet component.
    	$exapp = new COM("Excel.application") or Die ("Can not connect to Excel.application!!! \n");
    
    //declare files
    	//VorlagenFile .xlt
    	$export_file = dPgetConfig ('root_dir') . '/modules/excel/Vorlage.xlt';
    	
    	//Pseudofile anlegen, mit welchem gearbeitet wird (-->Name über Randomfunktion), um Überschreibung von Vorlage zu vermeiden
    	srand ((double)microtime()*1000000);
    	$randvalue = rand();
    	$copy_file = dPgetConfig('root_dir') . '/modules/excel/' .$randvalue . '.xlt';
    	//create a copy of export_file
    	copy($export_file, $copy_file);
    	
    	//ErgebnisFile --> wird am Schluß gespeichert
    	$import_file = dPgetConfig('root_dir') . '/modules/excel/Auswertung.xls';
    
    
    
    //open existing document
    	$exapp->Workbooks->Open($copy_file) or Die ("Unable to open Workbook!!! \n"); 
    		
    //Select and Activate the sheet; fill into new file
    	$sheets = $exapp->Workbooks[1]->Worksheets(1);
    	$sheets->activate;
    //hier befüllen mit Werten aus der DB
    //....
    
    
    //delete import_file when exists
    	while (file_exists($import_file)){
    		unlink($import_file);
    	}
    //copy_file save as import_file
    	$exapp->Workbooks[1]->SaveAs($import_file) or Die ("Unable to save File!!! \n");	
    	
    //free the object
    	unset($sheets);
    //Workbook close
    	$exapp->Workbooks[1]->Close();
    //closing excel 
    	$exapp->Quit();
    //free the object 
    	unset($exapp);
    
    //dieser Teil scheint nicht korrekt zu funktionieren!!!
    //Speichern unter... realisieren
    	$save_dir = dPgetConfig('root_dir') . '/modules/excel/';
    	$save_file = 'Auswertung.xls';
    	$file = $save_dir.$save_file;
    	header("Content-Type: application/vnd.ms-excel"); 
    	header("Content-Length: ".filesize($file)); 
    	header("Content-Disposition: attachment; filename=".$file); 	
    	readfile($file);
    }
    Im Speichern unter... soll die zuvor erzeugte und fest abgespeicherte Auswertung.xls, die ja schon in einem Ordner existiert, lediglich zum Download angeboten werden.

    Es geht alles, bis auf den Speichern unter... -Teil. Ich habe den Header schon an alle möglichen Stellen im File gesetzt - geht nicht.

    Hat jemand eine Idee???

    Danke, Rico.

  • #2
    Sorry, hab hier nochmals den Code, allerdings mit php-Tags - ist einfach besser lesbar :wink:

    PHP-Code:
    function export_excel($logs){
    //Instantiate the spreadsheet component.
        
    $exapp = new COM("Excel.application") or Die ("Can not connect to Excel.application!!! \n");

    //declare files
        //VorlagenFile .xlt
        
    $export_file dPgetConfig ('root_dir') . '/modules/excel/Vorlage.xlt';
        
        
    //Pseudofile anlegen, mit welchem gearbeitet wird (-->Name über Randomfunktion), 
       //um Überschreibung von Vorlage zu vermeiden
        
    srand ((double)microtime()*1000000);
        
    $randvalue rand();
        
    $copy_file dPgetConfig('root_dir') . '/modules/excel/' .$randvalue '.xlt';
        
    //create a copy of export_file
        
    copy($export_file$copy_file);
        
        
    //ErgebnisFile --> wird am Schluß gespeichert
        
    $import_file dPgetConfig('root_dir') . '/modules/excel/Auswertung.xls';



    //open existing document
        
    $exapp->Workbooks->Open($copy_file) or Die ("Unable to open Workbook!!! \n"); 
            
    //Select and Activate the sheet; fill into new file
        
    $sheets $exapp->Workbooks[1]->Worksheets(1);
        
    $sheets->activate;
    //hier befüllen mit Werten aus der DB
    //....


    //delete import_file when exists
        
    while (file_exists($import_file)){
            
    unlink($import_file);
        }
    //copy_file save as import_file
        
    $exapp->Workbooks[1]->SaveAs($import_file) or Die ("Unable to save File!!! \n");    
        
    //free the object
        
    unset($sheets);
    //Workbook close
        
    $exapp->Workbooks[1]->Close();
    //closing excel 
        
    $exapp->Quit();
    //free the object 
        
    unset($exapp);

    //dieser Teil scheint nicht korrekt zu funktionieren!!!
    //Speichern unter... realisieren
        
    $save_dir dPgetConfig('root_dir') . '/modules/excel/';
        
    $save_file 'Auswertung.xls';
        
    $file $save_dir.$save_file;
        
    header("Content-Type: application/vnd.ms-excel"); 
        
    header("Content-Length: ".filesize($file)); 
        
    header("Content-Disposition: attachment; filename=".$file);     
        
    readfile($file);

    Kommentar


    • #3
      hättest deinen ersten Post auch einfach editieren können ..

      Kommentar


      • #4
        Zitat von magic_halli
        Es geht alles, bis auf den Speichern unter... -Teil.
        Wohl eher doch nicht...
        Zitat von magic_halli
        doch speichert es eine *.xls mit 1kB und nicht wie gewünscht meine erzeugte Datei mit 77kB!!!

        Kommentar


        • #5
          Danke für die Antworten... hat mir ungemein geholfen

          Also wisst ihr auch keinen Rat?!

          Kommentar


          • #6
            Hmmm ... - sieht soweit korrekt aus ...

            Mal ein paar Schüsse "ins Blaue" : Hast du dir die Größe des Files mittels filesize($file) mal "ausserhalb" des header-Zeugs ausgeben lassen ...? Sind's dann 77kB ?

            Welchen Browser verwendest du? Wenn ich mich recht entsinne, gab's bei einigen (älteren) Versionen des IE Probleme mit header("Content-Length: ".XXX);. In wieweit sich das aber auf die "Funktionalität" an sich auswirkt ...?

            Vielleicht mal error_reporting(E_ALL) reinbasteln ...? (Obwohl das bei deinem Code wahrschenlich keine weiteren Erkenntnisse bringen wird ...?)

            Kommentar


            • #7
              2 mögl. Ansatzpunkte

              überprüfe mal die Auswertung.xls auf dem Server ob diese auch korrekt gefüllt ist

              statt
              PHP-Code:
                  header("Content-Type: application/vnd.ms-excel"); 
                  
              header("Content-Length: ".filesize($file)); 
                  
              header("Content-Disposition: attachment; filename=".$file); 
              nimm folgenden
              PHP-Code:
                  header("Content-Type: application/x-msexcel"); 
                  
              header("Content-Length: ".filesize($file)); 
                  
              header("Content-Disposition: inline; filename=".$file); 

              Kommentar


              • #8
                So, habe viel probiert... soweit, sogut. Filegröße, Füllung der Auswertung.xls usw. passt alles, aber dauernd speichert bzw. stellt es mir die index.php
                bzw. das Layout dieser dar - und nicht meine eigentliche Datei, obwohl ich nur meine Datei zum Download anbiete (geschiet mit readfile($file) )!!!

                PHP-Code:
                   $save_dir dPgetConfig('root_dir') . '/modules/excel/';
                   
                $save_file 'Auswertung.xls';
                   
                $file $save_dir.$save_file;

                   
                $len filesize($file);
                   
                $filename basename($file);    //extrahiert nur den Dateinamen

                   
                header("Pragma: public");
                   
                header("Expires: 0");
                   
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                   
                header("Cache-Control: public"); 
                   
                header("Content-Description: File Transfer");
                   
                header("Content-Type: application/vnd.ms-excel");

                   
                //Force the download
                   
                header="Content-Disposition: inline; filename=".$filename.";";
                   
                header("Content-Transfer-Encoding: binary");
                   
                header("Content-Length: ".$len);
                   
                readfile($file);    //File, welches zum downloaden angeboten wird 
                Wieso um alles in der Welt lädt es die index.php runter bzw. stellt diese dar?

                PS::Außerdem kommt beim öffnen der Datei eine Meldung:
                "Problem beim Laden: Fehlende Datei ...TemporaryInternetFiles\Content.IE5\...\style\de fault\main.css"!!!

                Kommentar


                • #9
                  Ich habe jetzt mal folgendes gemacht:
                  Dies ganze Headerzeug auskommentiert und einfach mal HTML-Links auf das erstellt File erzeugt!


                  PHP-Code:
                  [url="<?php dPgetConfig('root_dir') . '/modules/GSM Auswertung Projekt-Zeiterfassung.xls'?>"]Downloadfile[/url]
                  ...und siehe da, es bietet mir die index.htm zum download an!!!

                  Meine php-Datei läuft als Include in einer anderen php-Datei und diese wird ihrerseits von der index.php aufgerufen. Kann das vielleicht daran liegen???

                  Kommentar

                  Lädt...
                  X