none
Html aus Visual basic erzeugen RRS feed

  • Frage

  • Hallo, habe folgende Zeilen

     Private Sub Button1_Erst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1_Erst.Click
    
    
        Dim lHtmlDoc = <html>
                  <head>
                    <title>HTML Ausgabe von <%= Me.Text %></title>
                  </head>
    
                  <body>
                    <p>Projekt <%= My.Settings.Setting11_projekt %><div><img src=<%= System.IO.Path.Combine(Application.StartupPath, "Blasi Member of.JPG") %> style="position:absolute; width=149; border=0; height=68;left:500px;top:10px"></img></div></p>
    
    
                    <p><%= My.Settings.Setting8_kund %><br>
                      <%= My.Settings.Setting9_Adr1 %><br>
                        <%= My.Settings.Setting10_adr2 %></br>
                      <%= My.Settings.PLZ %></br>
                      <%= My.Settings.ORT %></p>
                    <%= My.Settings.Land %>
    
                    <h5><p>Kontaktperson :<%= My.Settings.KontPers %> / <%= My.Settings.Tel %> / <%= My.Settings.Mobil %></p></h5>
                    <hr/>
    
                    <TABLE BORDER="1" cellspacing="0.4" cellpadding="8">
                      <TR>
                        <TH>TYP</TH>
                        <TH>T</TH>
                        <TH>G</TH>
                        <TH>U</TH>
                        <TH>I</TH>
                        <TH>A</TH>
                        <TH>J</TH>
                        <TH>Art.Nr</TH>
                      </TR>
                      <TR>
                        <TD><%= Label1K31.Text %></TD>
                        <TD><%= Fertigungsinformation.ComboBox2_T.Text %></TD>
                        <TD><%= Fertigungsinformation.ComboBox1_G.Text %></TD>
                        <TD><%= Fertigungsinformation.TextBox5_U.Text %></TD>
                        <TD><%= Fertigungsinformation.TextBox3_I.Text %></TD>
                        <TD><%= Fertigungsinformation.TextBox4_A.Text %></TD>
                        <TD><%= Fertigungsinformation.TextBox2_J.Text %></TD>
                        <TD><%= Me.Label2_Art.Text %></TD>
                      </TR>
    
    
    
                    </TABLE>
                    <p></p>
                    <p></p>
                    <p>G= Art.Nr: <%= My.Settings.DhArt %></p>
                    <p>LOGO :<%= My.Settings.Blasi %></p>
                    <h3><p>Optionen</p></h3>
    
                    <TABLE BORDER="1" cellspacing="0.4" cellpadding="5">
                      <TR>
                        <TH>_</TH>
                        <TH>Anzahl</TH>
                        <TH>Beschichtung</TH>
                        <TH>Art.Nr</TH>
    
                      </TR>
                      <TR>
                        <TD><%= My.Settings.Ral22 %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.RAL %></TD>
                        <TD>_</TD>
                      </TR>
    
                      <TR>
                        <TD><%= My.Settings.Vollauto %></TD>
                        <TD>_</TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.VollAutoArt %></TD>
    
                      </TR>
    
    
                      <TR>
                        <TD><%= My.Settings.Griffe %></TD>
                        <TD><%= Fertigungsinformation.TextBox6_GAnz.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.GriffeArt %></TD>
                      </TR>
                      <Tr>
                        <TD><%= My.Settings.Entriegelung %></TD>
                        <TD><%= Fertigungsinformation.TextBox9_entr.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.EntrArt %></TD>
                      </Tr>
    
                      <tr>
                        <TD><%= My.Settings.VerRiegel %></TD>
                        <TD><%= Fertigungsinformation.TextBox8_verr.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.VerArt %></TD>
                      </tr>
    
                      <tr>
                        <TD><%= My.Settings.Scherka %></TD>
                        <TD><%= Fertigungsinformation.TextBox10_Scherk.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.ScherkArt %></TD>
                      </tr>
    
                      <tr>
                        <TD><%= My.Settings.Fersenleiste %></TD>
                        <TD><%= Fertigungsinformation.TextBox6_fers.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.FersArt %></TD>
                      </tr>
    
    
    
                      <tr>
                        <TD><%= My.Settings.BeweFly %></TD>
                        <TD><%= Fertigungsinformation.TextBox11_Fly.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.BewFlyArt %></TD>
                      </tr>
    
                      <tr>
                        <TD><%= My.Settings.Dachw %></TD>
                        <TD><%= Fertigungsinformation.TextBox13_DW.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.DachWaArt %></TD>
                      </tr>
    
                      <tr>
    
                        <TD><%= My.Settings.FlügelManKla %></TD>
                        <TD><%= Fertigungsinformation.TextBox14_FlüManKlap.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.FlüManArt %></TD>
    
                      </tr>
    
                      <tr>
                        <TD><%= My.Settings.BedienAufp %></TD>
                        <TD><%= Fertigungsinformation.TextBox12_BDIAufp.Text %></TD>
                        <TD>_</TD>
                        <TD><%= My.Settings.BDAart %></TD>
                      </tr>
    
                    </TABLE>
    
                    <p></p>
                    <p></p>
    
                    <TABLE BORDER="1" cellspacing="0.4" cellpadding="12" align="right">
    
                      <TR>
                        <TD>SUMME</TD>
                        <TD>EURO :</TD>
                        <TD bgcolor="#FFFF00"><%= TextBox1_Eu.Text %></TD>
                      </TR>
    
    
                    </TABLE>
                  </body>
    
    
    
                </html>
    
    
    
        Dim lFile As String
        lFile = m_Tfc.AddExtension("html")
    
        lHtmlDoc.Save(lFile)
        Process.Start(lFile)
    
    
    wenn ich jetzt das zweite mal auf erstellen gehe, gibt es einen Fehler, wie kann ich das abfangen, das einfach dann eine zweite Seite erzeugt wird.
    Dienstag, 11. Januar 2011 15:44

Antworten

  • Hi,

    Kurz gesagt wenn ich auf den button klicke, soll eine neue seite, mit den aktuellen werten aufgehen

    dann wäre es ggfs. sinnvoller, den Dateinamen einfach zufällig zu bilden.

      http://msdn.microsoft.com/de-de/library/system.io.path.getrandomfilename.aspx

    Anstelle von

      lFile = m_Tfc.AddExtension("html")

    schreibst Du dann bspw.:

      lFile = Path.Combine( "X:\Ordner", Path.GetRandomFileName() & ".html" )

    oder auch:

      lFile = String.Format( "X:\Ordner\{0}.html", Path.GetRandomFileName() )

    "X:\Ordner" wäre der Ordner, in dem die Datei erzeugt werden soll. Falls Path... nicht gefunden wird, schreib noch ein Imports System.IO in deine Codedatei (ganz zu Anfang)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Bergfeuer Montag, 17. Januar 2011 10:23
    Sonntag, 16. Januar 2011 14:49
    Moderator

Alle Antworten

  • Hi,
    Dim lFile As String
        lFile = m_Tfc.AddExtension("html")
        lHtmlDoc.Save(lFile)
        Process.Start(lFile)

    wenn ich jetzt das zweite mal auf erstellen gehe, gibt es einen Fehler, wie kann ich das abfangen, das einfach dann eine zweite Seite erzeugt wird.

    die Datei wird wohl noch im Zugriff sein, daher kann diese nicht überschrieben werden. Fang den Fehler mit einem Try ... Catch Konstrukt ab und setz dann den Dateinamen in lFile neu.

    Noch eine Anmerkung: "gibt es einen Fehler" ist nicht sonderlich hilfreich. besser wäre die genaue und vollständige Fehlermeldung inkl. Angabe der Codezeile, die den Fehler verursacht.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 11. Januar 2011 16:12
    Moderator
  • Hi,

    siehe die Antwort in deinem anderen Doppelposting.

      http://social.msdn.microsoft.com/Forums/de-DE/vbasicexpresseditionde/thread/9b16ab01-3947-40df-bfb6-89e6bf024431

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 11. Januar 2011 16:15
    Moderator
  • Danke

    wenn ich das so mache

     Dim lFile As String
    
        Try
          lFile = m_Tfc.AddExtension("html")
          lHtmlDoc.Save(lFile)
          Process.Start(lFile)
        Catch ex As Exception

    stürzt er mich nicht mehr ab, aber wie mach ich das jetzt das ein neue html aufgeht. Irgenwo muss ich doch so was ähnliches wie New lfile definieren??

    Grüße

    Samstag, 15. Januar 2011 10:57
  • Hi,
    stürzt er mich nicht mehr ab, aber wie mach ich das jetzt das ein neue html aufgeht. Irgenwo muss ich doch so was ähnliches wie New lfile definieren??

    ein Try ... Catch ohne jegliche weitere Behandlung des Fehlers ist in den meisten Fällen nicht sinnvoll.

    In deinem Fall stellt sich die Frage, was genau Du eigentlich erreichen willst?

    Der Prozess wird ja gestartet, dabei dann die Datei gesperrt. Überschreiben geht also nicht.

    Willst Du jetzt dennoch die Datei überschreiben? Dann müsstest Du den Prozess und damit die Dateisperre vorher beenden.

    Wenn Du lediglich eine neue Datei erzeugen willst, musst Du dann lFile oder auch m_Tfc mit einem neuen Dateinamen belegen. und die nachfolgenden Zeilen nochmals aufrufen. Daher wäre es sinnvoll, wenn Du den Code in eine eigene Methode auslagern würdest. Hierbei wäre dann noch wichtig zu wissen, ob das "unendlich" oft passieren soll (wenn Du also 3 Zilliarden mal auf den Button klickst) oder nur einmal. ...

    Wie Du siehst, gibt es erst einmal jede Menge Fragen, die Du bitte beantworten solltest. Wenn dann klar ist, was Du wie machen willst, kann ich (oder jemand anders) dir auch ein Codebeispiel posten, wenn es mit der Umsetzung nicht klappt.

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 15. Januar 2011 13:15
    Moderator
  • hallo,

    ich gebe ja über den html code werte aus, wenn ich jetzt zum bsp einen wert im progr. ändere sollte er in einer neue seite angezeigt werden, nicht die alte überschreiben.

    Kurz gesagt wenn ich auf den button klicke, soll eine neue seite, mit den aktuellen werten aufgehen

    Und ja ich brauch Starthilfe ;D..

    Danke

    Sonntag, 16. Januar 2011 00:45
  • Hi,

    Kurz gesagt wenn ich auf den button klicke, soll eine neue seite, mit den aktuellen werten aufgehen

    dann wäre es ggfs. sinnvoller, den Dateinamen einfach zufällig zu bilden.

      http://msdn.microsoft.com/de-de/library/system.io.path.getrandomfilename.aspx

    Anstelle von

      lFile = m_Tfc.AddExtension("html")

    schreibst Du dann bspw.:

      lFile = Path.Combine( "X:\Ordner", Path.GetRandomFileName() & ".html" )

    oder auch:

      lFile = String.Format( "X:\Ordner\{0}.html", Path.GetRandomFileName() )

    "X:\Ordner" wäre der Ordner, in dem die Datei erzeugt werden soll. Falls Path... nicht gefunden wird, schreib noch ein Imports System.IO in deine Codedatei (ganz zu Anfang)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Bergfeuer Montag, 17. Januar 2011 10:23
    Sonntag, 16. Januar 2011 14:49
    Moderator
  • Hallo...

    In einem von mir erstellen Programm möchte ich folgenden Code dazu gebrauchen, um einige Variablenwerte in einer HTML-Datei auszugeben, welche ich z.B. mit Dropbox synchronisieren und unterwegs zugreifen kann.

    Option Strict On
    Option Explicit On
    
    Imports System.IO
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    
            Dim lHtmlDoc = 
                               
                                   Wetter xxxxx <%= Me.Text %>Wetter Standort: xxxx, xxxxxx 75:
                                   
                                        Innentemperatur: <%= TextBox1.Text %>
                                        Aussentemperatur: <%= TextBox2.Text %>
                                        Windgeschwindigkeit: <%= TextBox3.Text %>
                                        Regenmenge der letzten 24h: <%= TextBox4.Text %>
                                        Vollmond: <%= TextBox5.Text %>
    
    
                                   
                               
                           
    
            Dim lFile As String = ""
    
            lFile = Path.GetFullPath("E:\xxxxxx\xxxxxx\xxxxxx\test1.html")
    
    
    
            lHtmlDoc.Save(lFile)
            Process.Start(lFile)
    
    
    
        End Sub
    End Class
    

    Erstelle ich in Visual Basic 2008 eine neues Projekt, funktioniert die Sache ohne Probleme.

    Füge ich den Code jedoch in mein bestehendes vb.net-Programm ein, erhalte ich folgende Fehlermeldung:

    Fehler    1    "Option Strict On" erfordert von allen Variablendeklarationen eine As-Klausel.

    Auch, wenn ich das Option Strict auf "Off" setze, will es nicht funktionieren.

    Wie müsste ich denn das lHtmlDoc deklarieren, damit der Code funktioniert?

    Vielen Dank für eure Hilfe.

    Freundlich grüsst

    Aldi

    Montag, 20. Mai 2013 16:30
  • Hallo Aldi,

    zum einen muss darum (mindestens) ein html/body Tag sein, wenn das Html werden soll:

            Dim lHtmlDoc =
                <html>
                    <body>Wetter xxxxx <%= Me.Text %>Wetter Standort: xxxx, xxxxxx 75:
                                        Innentemperatur: <%= TextBox1.Text %>
                                        Aussentemperatur: <%= TextBox2.Text %>
                                        Windgeschwindigkeit: <%= TextBox3.Text %>
                                        Regenmenge der letzten 24h: <%= TextBox4.Text %>
                                        Vollmond: <%= TextBox5.Text %>
                    </body>
                </html>
    

    Zum anderen:

    Verwende zusätzlich die Option Option Infer On. Dann hilft Visual Basic beim "Raten".
    (Die Optionen kann man bei den Projekt-Eigenschaften dauerhaft festlegen).

    Wenn Du mit dem Cursor über die Variable fährst, siehst Du das VB daraus macht:

    Dim lHtmlDoc As System.Xml.Linq.XElement =


    Alternativ kannst Du das natürlich selbst tippen, und im Falle eines Imports System.Xml.Linq verkürzen auf XElement.

    Gruß Elmar

    Montag, 20. Mai 2013 16:50
  • Huch, seltsam. Mir ist erst jetzt aufgefallen, dass es die ganzen Tags gar nicht übernommen hat. Ich versuche es auf eine andere Art:

    --------------------------------------------------------------------------------------

    Dim lHtmlDoc = <html>
                               <head>
                                   <title>Wetter xxxxx <%= Me.Text %></title>
                               </head>
                               <body>
                                   <p>Wetter Standort: xxxx, xxxxxx 75:</p>
                                   <ul>
                                       <li> Innentemperatur: <strong><%= TextBox1.Text %></strong></li>
                                       <li> Aussentemperatur: <strong><%= TextBox2.Text %></strong></li>
                                       <li> Windgeschwindigkeit: <strong><%= TextBox3.Text %></strong></li>
                                       <li> Regenmenge der letzten 24h: <strong><%= TextBox3.Text %></strong></li>
                                       <li> Vollmond: <strong><%= TextBox3.Text %></strong></li>


                                   </ul>
                               </body>
                           </html>

            Dim lFile As String = ""

            lFile = Path.GetFullPath("E:\xxxxxx\xxxxxx\xxxxxx\test1.html")



            lHtmlDoc.Save(lFile)
            Process.Start(lFile)

    --------------------------------------------------------------------------------------

    Wenn ich das System.Xml.Linq importiere, erhalte ich folgende Fehlermeldung:

    Warnung    1    Der in Imports "System.Xml.linq" angegebene Namespace oder Typ enthält keine öffentlichen Member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens einen öffentlichen Member enthält und dass der importierte Elementname keine weiteren Aliase enthält.  

    Das heisst für mich...?

    Montag, 20. Mai 2013 19:33
  • Hallo Aldi,

    Wenn beim Imports (oder bei der Angabe von XElement in epischer Länge ;) gemeckert wird,
    so fehlt die Assembly in den Verweisen, siehe Verweise und die Imports-Anweisung (Visual Basic)

    Gruß Elmar

    Montag, 20. Mai 2013 20:03
  • Hallo Elmar.

    Danke für deinen Hinweis. Soweit ich dies beurteilen kann, wird für das System.Xml.Linq das NET Framework 3.5 benötigt.
    Zudem muss ich erwähnen, dass mir die Sache auf meinem Windows 7 - Rechner funktioniert hat, während anscheinend Windows 8 damit Probleme hat. Im Windows 8 ist das NET Fw 3.5 standartmässig nicht installiert.

    Also habe ich das NET Framework 3.5 anhand nachfolgendem Link installiert (bzw. aktiviert):
    http://msdn.microsoft.com/de-de/library/vstudio/hh506443.aspx

    Wenn ich das System.Xml.Linq unter Verweise hinzufügen möchte, sehe ich den Eintrag, jedoch kann er nicht ausgewählt werden. Fahre ich mit der Maus darüber, erscheint folgende Meldung:

    ----------------------------------------------------------------------------
    System.Xml.Linq ist nicht mit der angegebenen Version von .NET Framework kompatibel. Sie können die Zielversion von .NET Framework ändern, indem Sie im Menü "Projekt" auf "Eigenschaften" klicken und anschliessend in der Dropdownliste ".NET Framework" ein neues Ziel auswählen.
    ----------------------------------------------------------------------------

    Dieses Dropdown-Menü kann ich jedoch in den Projekteigenschaften nicht finden.

    Hast du noch einen Tipp für mich?
    Dienstag, 21. Mai 2013 15:18
  • Neue Erkenntnisse:

    Es liegt wohl doch nicht am Windows 8, sondern an meinem bestehenden Programm.

    Wenn ich nämlich das System.Xml.Linq im Windows 7-Rechner importieren möchte, funktioniert dies genauso wenig.

    Welche Einstellung könnte falsch sein?

    Dienstag, 21. Mai 2013 16:23
  • Hallo Aldi,

    finden tut man den Dialog (bei 2008 / 2010) in dem man die Projekt-Eigenschaften aufruft.

    Dort in dem Reiter "Kompilieren" und ganz unten die Schaltfläche "Erweiterte Kompilierungsoptionen". Dann taucht ein weiter Dialog auf bei dem (ebenfalls unten) das Zielframework eingestellt werden kann.

    Offizielle Anleitung Gewusst wie: Festlegen eines bestimmtes .NET Framework-Ziels

    LINQ To Xml erfordet mindestens .NET Framework 3.5 (Client Profile).

    Am Rande: Wenn Du bereits auf Windows 8 entwickelst, so könntest Du auf das aktuelle Visual Studio Express 2012 Windows Desktop wechseln und das .NET Framework 4.5 einsetzen. Das hält dann für ein paar Jahre... und wenn nötig kann damit auch für ältere .NET Versionen entwickeln.
    (Das Einstellen des Frameworks ist dort nicht mehr so versteckt, sondern direkt unter Eigenschaften->Anwendung zu finden)

    Gruß Elmar

    Dienstag, 21. Mai 2013 16:47

  • Leider bin ich etwas zu spät. Wollte dir gerade berichten, dass ich es herausgefunden habe. Andere können jedoch sicherlich auch noch davon profitieren...

    Jedenfalls scheint es zu funktionieren.

    Ich werde mir auch noch Gedanken über den Wechsel zu VB 2012 machen... ;-)

    Besten Dank für deine Unterstützung!!

    Freundlich grüsst

    Aldi

    Dienstag, 21. Mai 2013 16:59
  • Die Sache funktioniert sehr gut. Sie könnte jedoch noch optimiert werden, indem meine in den Variablen gespeicherten Wetterdaten forlaufend in eine html-Datei eingetragen werden. D.h. der aktuellste Wert steht stets zuoberst.

    Wird ein neuer Wert eingetragen, rutschen alle alten Werte eine Zeile nach unten und der neue Wert wird in erster Stelle angezeigt.

    Kannst du mir noch einen "Ruck" geben...? Es fällt mir kein Stichwort ein, nach dem ich bei Google suchen könnte...

    LG Aldi

    Dienstag, 21. Mai 2013 18:38
  • Hallo Aldi,

    was wir da oben haben ist LINQ To Xml (in der erweiterten Visual Basic Syntax).

    Und dort kann man die Daten in XDocument laden, und mit Add ein neues Xlement - hier am body -  anfügen, siehe dazu: Hinzufügen von Elementen, Attributen und Knoten zu einer XML-Struktur

    Versuche es erst einmal selbst, dann ist der Lerneffekt höher. Geht es gar nicht melde Dich.

    Gruß Elmar

    Dienstag, 21. Mai 2013 19:04
  • ojemine... :-)

    Ich bin noch ein ziemlicher Anfänger und sollte mich wohl zuerst mit den grundlegenderen Sachen auseinandersetzen und dieses Thema zu einem späteren Zeitpunkt nochmals in Betracht ziehen.

    Oder gehört dies zu den Pflichtthemen auf dem Weg zum Visual Basic - Programmierer?? :-)

    Gruss Aldi

    Mittwoch, 22. Mai 2013 17:24