PHP und Excel/COM

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

  • PHP und Excel/COM

    Hallo zusammen!

    Ich habe eine Schnittstelle zu Excel (per COM) erstellt und versuche nun ein vorhandenes Tabellenblatt "Vorlage" innerhalb dieser Excel-Mappe zu kopieren resp. dublizieren.

    Im Excel-Makro sieht der Code wie folgt aus:
    Sheets("Vorlage").Select
    Sheets("Vorlage").Copy Before:=Sheets(1)

    Nun versuche ich die Sache per PHP/COM abzubilden; bis anhin habe ich folgenden PHP-Code erstellt.

    PHP-Code:
    <?php
        $strWorkbook 
    "C:\EXCEL\MAPPEN\TEST.XLS";
        
    $objXls = new COM("Excel.sheet"
            or die (
    "can't connect to COM");
        
    $ObjWkb $objXls->application->Workbooks->Open($strWorkbook
            or die (
    "can't open $workbook");
        
    $objXls->Application->Sheets("Vorlage")->select;
        
    $objXls->Application->Sheets("Vorlage")->copy ... 
        
    $objXls->Application->ActiveWorkbook->SaveAs("mytest");  
        
    $objXls->application->ActiveWorkbook->Close("False");  
        unset (
    $objXls);
    ?>
    Leider scheitere ich aber immer wieder bei der Übersetzung des Abschnitts mit "Copy Before:=Sheets(1)". Kann mir jemand sagen, wie ich diesen Befehl richtig für PHP/COM umformuliere?

    Besten Dank für Eure Hilfe!

  • #2
    Leider scheitere ich aber immer wieder bei der Übersetzung des Abschnitts mit "Copy Before:=Sheets(1)".
    diese Schreibweise in VBA bedeutet: weise den optionalen Parameter namens Before den Wert Sheets(1) zu. Nun bist du dran

    Kommentar


    • #3
      Habe heute versucht den optionalen Parameter namens "before" dem Wert "Sheets(1)" hinzuzufügen; habe die Lösung jedoch nicht herausgefunden!

      Ich weiss nicht genau, wie und wo ich den Wert "Sheets(1)" und den optionalen Parameter einbauen kann.

      PHP-Code:
          $objXls->Application->Sheets("Vorlage")->copy-> ... 
      Kannst Du mir da weiterhelfen?

      Thanks!

      Kommentar


      • #4
        andere Frage: wie übergibt man optionalen Parameter in PHP? Sei die Funktion gegeben

        PHP-Code:
        function foo($a$b=1$c=null$d='blah') {
        //...

        jetzt willst du die Funktion aufrufen und dabei $c mit irgendeinem Wert belegen, wie machst du das? und genauso machst du bei copy.

        Kommentar


        • #5
          Ich habe folgendes schon versucht:

          PHP-Code:
          $objXls->Application->Sheets("Vorlage")->copy("before","Sheets(1)"); 
          Das funktioniert aber nicht; es erscheint nur eine Fehlermeldung.

          Ich gehe davon aus, dass ich die Werte falsch übergebe?!?

          Der Ansatz mit copy() scheint mir aber richtig zu sein!

          Hast Du eine Idee wie ich das richtig umformulieren muss?

          Thanks!

          Kommentar


          • #6
            fange mal hiermit an:
            Original geschrieben von asp2php
            andere Frage: wie übergibt man optionalen Parameter in PHP? Sei die Funktion gegeben

            PHP-Code:
            function foo($a$b=1$c=null$d='blah') {
            //...

            jetzt willst du die Funktion aufrufen und dabei $c mit irgendeinem Wert belegen, wie machst du das? und genauso machst du bei copy.
            wenn du dies schaffst dann kannst du auf dein Problem übertragen

            Kommentar


            • #7
              Um den Wert $c zu belgen, verwende ich:

              PHP-Code:
              foo('','','Test',''); 
              Ich bin aber ziemlich ratlos, wie ich dies auf mein Problem übertragen soll?

              Kommentar


              • #8
                Original geschrieben von ThomasM
                Um den Wert $c zu belgen, verwende ich:

                PHP-Code:
                foo('','','Test',''); 
                Ich bin aber ziemlich ratlos, wie ich dies auf mein Problem übertragen soll?
                yeah, ... finde einfach heraus, z.B. im VBA-Editor im Excel, an welcher Stelle das Argument Before steht und verfahre genauso

                Kommentar


                • #9
                  Gehe ich von der richtigen Annahmen aus, dass ich nebst dem Wert "before" auch noch "Sheets(1)" in irgend einem Feld eintragen muss?

                  Kann ich die restlichen Stellen einfach leer lassen?

                  Thanks, für Deine Hilfe - bin echt froh!

                  Kommentar


                  • #10
                    ich sagte:
                    Original geschrieben von asp2php
                    diese Schreibweise in VBA bedeutet: weise den optionalen Parameter namens Before den Wert Sheets(1) zu.
                    lese bitte den Satz mehrmals durch, dann weisst du was zu tun ist

                    Kommentar


                    • #11
                      Im Excel VB-Editor steht (Makro-Aufzeichnung):

                      Sheets("Vorlage").Select
                      Sheets("Vorlage").Copy Before:=Sheets(1)

                      Wie kann ich nachsehen, an welcher Stelle das Argument Before stehen soll? Ich habe noch nie etwas mit VB gemacht!

                      Kommentar


                      • #12
                        Original geschrieben von ThomasM
                        Wie kann ich nachsehen,
                        es gibt Intellisense im Editor, der aufklappt wenn du die Methode niederschreibst, oder F1 hilft immer!

                        Kommentar


                        • #13
                          Ich habe nun im Excel VB nachgeschaut und folgendes gefunden:

                          Copy(Before, After)

                          Daraufhin habe ich das Skript wie folgt angepasst:
                          PHP-Code:
                          <?php
                              $strWorkbook 
                          "C:EXCELMAPPENTEST.XLS";
                              
                          $objXls = new COM("Excel.sheet"
                                  or die (
                          "can't connect to COM");
                              
                          $ObjWkb $objXls->application->Workbooks->Open($strWorkbook
                                  or die (
                          "can't open $workbook");

                              
                          $objBook->Application->Sheets(1);
                              
                          $objXls->Application->Sheets("Vorlage")->select;
                              
                          $objXls->Application->Sheets("Vorlage")->copy($objBook,"");

                              
                          $objXls->Application->ActiveWorkbook->SaveAs("mytest");  
                              
                          $objXls->application->ActiveWorkbook->Close("False");  
                              unset (
                          $objXls);
                          ?>
                          Es funktioniert aber leider trotzdem nicht; obwohl ich ja dem Parameter before den Wert Sheets(1) zugewiesen habe.

                          Kommentar


                          • #14
                            Original geschrieben von ThomasM
                            PHP-Code:

                                $objBook
                            ->Application->Sheets(1);
                                
                            $objXls->Application->Sheets("Vorlage")->select
                            Es funktioniert aber leider trotzdem nicht; obwohl ich ja dem Parameter before den Wert Sheets(1) zugewiesen habe.
                            weil die 2 obigen Zeilen komplette blödsinn ist.

                            1. $objBook hast du nirgends instantiiert, oder doch?
                            2. mit $objXls->Application->Sheets("Vorlage") greifst du auf garnichts. Wozu hast du $ObjWkb = $objXls->application->Workbooks->Open($strWorkbook) bereitgestellt?

                            Kommentar


                            • #15
                              Damit ich den Wert für "before" festlegen kann muss ich doch diesen zuerst generieren:

                              Sollte doch so funktionieren:
                              PHP-Code:
                              $objBook $objXls->Application->Sheets(1); 
                              danach sollte doch der Kopiervorgang mit:
                              PHP-Code:
                              $objXls->Application->Sheets("Vorlage")->copy($objBook,""); 
                              möglich sein, oder?

                              Die $ObjWkb = $objXls->application->Workbooks->Open($strWorkbook) habe ich bereitgestellt, um später im Sheet zwei Zelleninhalte anzupassen!

                              Die ...->select Zeile ist natürlich unnötig; ist wohl noch vom ersten Skript hineingerutscht!

                              Kommentar

                              Lädt...
                              X