PHP und Excel/COM

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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!

      Comment


      • #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.

        Comment


        • #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!

          Comment


          • #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

            Comment


            • #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?

              Comment


              • #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

                Comment


                • #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!

                  Comment


                  • #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

                    Comment


                    • #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!

                      Comment


                      • #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!

                        Comment


                        • #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.

                          Comment


                          • #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?

                            Comment


                            • #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!

                              Comment

                              Working...
                              X