apfelkraft.ch: Mit Button "Rechtsklick --> Export to Excel" aufrufen?

Hat man im Internet Explorer (wir verwenden hier intern nichts anderes, muss also in FF usw. nicht funktionieren) eine Tabelle und klickt mit der rechten Maustaste auf diese so gibt es die Option "Export to Excel"!

Nun wäre die Frage wie man diese Funktion via Button aufrufen kann, zur Zeit wird beim drücken des Button eben ein VBScript, sprich ActiveX aufgerufen was aber bei uns verboten ist. Nun wäre es toll wenn es anstatt der Fehlermeldung einfach die "Export to Excel" Funktion aufrufen würde, ist soetwas möglich?

  1. Moin Moin!

    Das klingt so, als hätte sich das Office-Paket in den IE eingeklinkt. (Allein bei der Vorstellung läuft es mir kalt den Rücken runter.) Wahrscheinlich kannst Du dann auf ActiveX-Controls des Office-Pakets zugreifen und dessen Funktionen auslösen, eine genügend niedrige Sicherheitsschwelle vorausgesetzt.

    Viel einfacher und portabler wäre natürlich, die Daten gleich auf dem Server als Excel aufzubereiten. Dann würde aus deinem "Traum-Button" ein ganz einfacher Link, der eine in der Seite enthaltene Tabelle schlicht und ergreifend noch einmal vom Server anfordert, diesmal aber nur die Tabelle und im Excel-Format.

    Perl hat z.B. Spreadsheet::WriteExcel für solche Konstruktionen, andere Umgebungen sollten ähnliche Module bieten. Notfalls kann man auch Spreadsheet::WriteExcel portieren.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Danke Dir, hatte aber vergessen zu erwähnen das diese HTML Tabellen bereits vorhanden sind und nicht angepasst werden können (bestehendes Tool) und diese sind auch fix....allerdings lässt sich das JS File anpassen in welchem der ActiveX Aufruf befindet der hier eben ins leere führt da bei uns ActiveX verboten ist.

      Es gibt somit keine andere Wahl ausser eben jemand kennt eine JS Funktion die einen solchen Aufruf macht der einem Rechtsklick und "Export to Excel" entspricht....

      1. Moin Moin!

        Danke Dir, hatte aber vergessen zu erwähnen das diese HTML Tabellen bereits vorhanden sind und nicht angepasst werden können (bestehendes Tool) und diese sind auch fix....

        Wer denkt sich nur immer solche Beschränkungen aus? Warum soll man ein Tool nicht anpassen, wenn es den Anforderungen nicht mehr genügt?

        allerdings lässt sich das JS File anpassen

        Immerhin etwas.

        in welchem der ActiveX Aufruf befindet der hier eben ins leere führt da bei uns ActiveX verboten ist.

        Guter Plan. Dann muß nur noch der IE abgeschafft werden.

        Es gibt somit keine andere Wahl ausser eben jemand kennt eine JS Funktion die einen solchen Aufruf macht der einem Rechtsklick und "Export to Excel" entspricht....

        Doch, es gibt andere Wege. Du hast die Tabellen im HTML-Dokument, und du kannst beliebig Javascript hinzufügen. Außerden reden wir über ein begrenztes Netzwerk (Intranet).

        Wenn das kaputte Tool also komplett Read-Only ist, dann mußt Du mit JS herumfummeln:

        * Ein Button wählt onclick eine Tabelle aus, sammelt ihre Daten aus der Struktur der DOM-Nodes zusammen, und überträgt sie in einem kompakten Format wie JSON an einen Hilfsserver, der daraus eine Excel-Datei macht (z.B. mit Perl, JSON::XS und Spreadsheet::WriteExcel) und diese dem Browser zum Download anbietet.
        * Ein Button wählt onclick eine Tabelle aus, überträgt die URL der aktuellen Seite und die eindeutige Kennung der ausgewählten Tabelle (DOM-ID, notfalls n-te Tabelle der Seite) an deinen Hilfsserver. Der holt sich die Daten nochmal vom Read-Only-Tool, extrahiert die Daten, und liefert eine Excel-Datei zum Download aus (z.B. mit Perl, LWP::Simple, HTML::Parser, Spreadsheet::WriteExcel).
        * Ein Button wählt onclick eine Tabelle aus, sammelt ihre Daten aus der Struktur der DOM-Nodes zusammen und konvertiert sie innerhalb von Javascript in Excel (Clone von Spreadsheet::WriteExcel in JS nachgebaut). Dabei ist neben der Geschwindigkeit vor allem ein sauberer "Download" des generierten Files problematisch. Eine data:-URL wäre bis zu einer gewissen Größe möglich. document.open("application/vnd.ms-excel","replace") und anschließendes document.write könnte im NN4 und im IE ebenfalls funktionieren.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. Vielen Dank, leider ist es ein bisschen komplizierter....das Tool welches die statischen HTML Seiten erstellt ist von einer anderen Firma die arbeiten schon an einer anderen Lösung kann aber noch lannnge dauern. Auch kann ich nur JS anpassen und weder PERL noch sonst was nutzen...leider.

          Eine solche Statische HTML Tabelle sieht wie folgt aus:

          <DIV ID=CF2  FIXROW=1 FIXCOL=2 FSTROW=3>  
          <TABLE ID="F2"  CLASS=NAVREP SORTABLE=Y SCROLL=0>  
          <THEAD>  
          <TR><TD CLASS=HD1 COLSPAN=7>&nbsp;  
          <A CLASS="SCROLL" HREF="javascript:Tblscroll('F2','False','MASYALD_TG0K')" onMouseOver="self.status='Scroll Table';return true;" onMouseOut="self.status='';return true;">  
          <IMG CLASS="IMGV" SRC="..\..\IMG\SCROLL.PNG" ></A>  
          <A CLASS="EXCEL" HREF="javascript:Epvexp('F2','False','MASYALD_TG0K')" onMouseOver="self.status='Export Table to Excel'; return true;"  onMouseOut="self.status='';return true;">  
          <IMG CLASS="IMGV" SRC="..\..\IMG\EXCEL.PNG" ></A>  
          <A CLASS="FAVOURITES" HREF="javascript:createCookie('ZOS','SYSTEM EXCEPTIONS DETAIL TG0K*'+document.location.href)" onMouseOver="self.status='Add to Favourites'; return true;" onMouseOut="self.status='';return true;">  
          <IMG CLASS="IMGV" SRC="..\..\IMG\FAVOURITES.PNG" ></A>  
           <A CLASS="HELP" HREF="..\..\ZOSDOC\MASYALD.HTML" TARGET=_BLANK onMouseOver="self.status='Help';return true;"  onMouseOut="self.status='';return true;">  
          <IMG CLASS="IMGV" SRC="..\..\IMG\HELP.PNG" ></A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXCEPTIONS&nbsp;&nbsp;-&nbsp;&nbsp;Mon, 25 May 2009 </TD></TR>  
          <TR>  
          <TD CLASS=HD2> MESSAGE </TD>  
          <TD CLASS=HD2> OBJECT </TD>  
          <TD CLASS=HD2> FREQ </TD>  
          <TD CLASS=HD2> OP </TD>  
          <TD CLASS=HD2> THRESHOLD </TD>  
          <TD CLASS=HD2> ALERT </TD>  
          <TD CLASS=HD2> PRI </TD>  
          </TR>  
          </THEAD>  
          <TBODY>  
          <TR onClick="HighLightTR(this)">  
          <TD CLASS=TXTCBLK NOWRAP TITLE="MESSAGE">GCP CAPTURE RATIO FOR SMF 72 RECORDS </TD>  
          <TD CLASS=TXTCBLK TITLE="OBJECT">  
          <A CLASS=HD2 NOWRAP HREF=MWMAIN.TG0K.D25MAY09.HTML#H3 >SYSTEM=TG0K </A></TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="FREQ">24 </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="OPERATOR">LT </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="THRESHOLD">70,0% </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="ALERT">CPCPR72 </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="PRIORITY">1 </TD>  
          </TR>  
          <TR onClick="HighLightTR(this)">  
          <TD CLASS=TXTCBLK NOWRAP TITLE="MESSAGE">PERFORMANCE INDEX </TD>  
          <TD CLASS=TXTCBLK TITLE="OBJECT">  
          <A CLASS=HD2 NOWRAP HREF=MWMAIN.TG0K.D25MAY09.HTML#HEADER3 >SYSTEM=TG0K,SRVCLASS=STCVH,PERIOD=1 </A></TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="FREQ">24 </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="OPERATOR">GE </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="THRESHOLD">1,2 </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="ALERT">PERFHIG </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="PRIORITY">1 </TD>  
          </TR>  
          <TR onClick="HighLightTR(this)">  
          <TD CLASS=TXTCBLK NOWRAP TITLE="MESSAGE">PERFORMANCE INDEX </TD>  
          <TD CLASS=TXTCBLK TITLE="OBJECT">  
          <A CLASS=HD2 NOWRAP HREF=MWMAIN.TG0K.D25MAY09.HTML#HEADER3 >SYSTEM=TG0K,SRVCLASS=STCNO,PERIOD=1 </A></TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="FREQ">10 </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="OPERATOR">GE </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="THRESHOLD">1,2 </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="ALERT">PERFHIG </TD>  
          <TD CLASS=TXTCBLK NOWRAP TITLE="PRIORITY">3 </TD>  
          </TR>  
          </TBODY>  
          </TABLE>  
          </DIV>
          

          Das Epvexp welches im JS steckt sieht dann:

          function Epvexp(actdiv, graph, model)  
          {  
             actpath = location.href;  
             graph   = 'False';  
             filter  =  
             VBEpvexp(actdiv, actpath, graph, model);  
          }
          

          und hier wird mit VBEpvexp dann folgendes aufgerufen:

          Sub VBEpvexp(tablexx, pathxx, graphxx, modxx)  
               On Error Resume Next  
            
               Const vbNormal = 1         ' window style  
            
               'dichiarazione variabili  
               DIM objXL, objWb, objR, objTab     ' Excel object variables  
               DIM Title, Text, tmp, i, j, file, name, table, path  
            
               ' create an Excel object reference  
               Set objXL = CreateObject ("Excel.Application")  
            
               If Err.Number>0 Then  
                  msgbox "Please modify your browser security settings to allow the use of Activex objects!"  
                  Exit Sub  
               End if  
            
          
          

          Wobei dies nur ein kleiner Ausschnitt ist, aber hier bei der Fehlermeldung könnte man allenfalls einhacken..?!?

          aber wenn ich Deine Texte richtig verstanden habe wird dies gar nicht funktionieren von wegen mit einem Klick den Rechtsklick auf die Tabelle ausführen und Export To Excel wählen?!?

          1. Moin Moin!

            Vielen Dank, leider ist es ein bisschen komplizierter....das Tool welches die statischen HTML Seiten erstellt ist von einer anderen Firma die arbeiten schon an einer anderen Lösung kann aber noch lannnge dauern. Auch kann ich nur JS anpassen und weder PERL noch sonst was nutzen...leider.

            Du kannst keinen zweiten Webserver aufstellen? Das nennt man dann wohl "A***karte gezogen".

            Eine solche Statische HTML Tabelle sieht wie folgt aus:

            Das Epvexp welches im JS steckt sieht dann:

            Das fällt ja schon unter Genfer Konventionen!

            Wobei dies nur ein kleiner Ausschnitt ist, aber hier bei der Fehlermeldung könnte man allenfalls einhacken..?!?

            Ganz ehrlich? Besorg Dir ein paar Stahlfässer, stopf die befallenen Server und alle befallenen Medien (CDs, Bücher) in die Fässer und laß sie in einem tiefen, trockenen Salzbergwerk verschwinden. Asse-II solltest Du besser meiden ... ;-)

            aber wenn ich Deine Texte richtig verstanden habe wird dies gar nicht funktionieren von wegen mit einem Klick den Rechtsklick auf die Tabelle ausführen und Export To Excel wählen?!?

            Mag sein, dass Du, wenn Du lange genug in VBA, ActiveX-Controls und Tonnen von MS-Dokumentationsattrappen herum wühlst, einen Weg findest, der auf einem Computer zufällig auch mit einem Rechtsklick funktioniert.

            Meine Ansätze waren darauf ausgelegt, mit möglichst geringen Eingriffen und möglichst unabhängig vom Browser zu funktionieren.

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
            1. Mag sein, dass Du, wenn Du lange genug in VBA, ActiveX-Controls und Tonnen von MS-Dokumentationsattrappen herum wühlst, einen Weg findest, der auf einem Computer zufällig auch mit einem Rechtsklick funktioniert.

              Meine Ansätze waren darauf ausgelegt, mit möglichst geringen Eingriffen und möglichst unabhängig vom Browser zu funktionieren.

              Der Browser wird hier ewig IE bleiben, sprich das ist mal kein Thema und die Funktion ist soweit auch recht praktisch in einer Tabelle Rechtsklick "Export to Excel" selektieren zu können. Im schlimmsten Fall werde ich wohl einfach die Fehlermeldung editeren und dort schreiben bitte Rechtsklick auf Tabelle für den Export....denn das ganze sollte für andere welche ActiveX verwenden weiterhin wie gehabt funktionieren denn dann könnte ich den Codechange wohl auch offiziell bei der Firma einbauen lassen....

              Nun ja, mal sehen ob ich hierbei was finde....vielen Dank jedenfalls, das es schlimm ist weiss ich leider auch....;)