Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Spalten aus Tabelle im WebBrowser löschen (https://www.delphipraxis.net/78217-spalten-aus-tabelle-im-webbrowser-loeschen.html)

huberlix 1. Okt 2006 04:05


Spalten aus Tabelle im WebBrowser löschen
 
Delphi 6

Ich möchte in nem Webbrowser eine Seite laden, die immer etwa so aussieht.

Nun soll der Kopf mit "Mist" gelöscht werden, und danach die Kompletten Spalten A,B,C und X.
Danach soll die Tabelle angepasst werden, z.B. Spaltenbreite usw, und dann der Text formatiert werden.

Hauptsächlich gehts jetzt mal ums Spaltenlöschen. Muss ich jetzt den ganzen Quelltext Zeichen für Zeichen durchforsten, und in jeder Reihe die Zelle löschen, die zu dieser Spalte gehört?
Oder gibts ne möglichkeit den HTML-Code so zu durchforsten, dass ich in etwa sagen kann:
Col[5].delete oder so ähnlich?

Gibts da ne spezielle Komponente? Ist halt meine erste Internet-Anwendung.

mkinzler 1. Okt 2006 09:52

Re: Spalten aus Tabelle im WebBrowser löschen
 
Du könntest die entsprechenden <th> bzw. <td> Spalten per Style ausblenden.

marabu 1. Okt 2006 17:56

Re: Spalten aus Tabelle im WebBrowser löschen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Bernd,

du kannst die HTML-Seite parsen und nur die Inhalte übernehmen, welche du für die spätere Ausgabe benötigst. In der angehängten Demo zeige ich dir, wie du mit der Indy-Komponente TIdHTTP den markup code von einer bestimmten web page laden kannst, wie du diesen Code in den MS HTML Parser laden, auf bestimmte Spalten einer Tabelle zugreifen und deren Text in ein StringGrid laden kannst.

Ein wichtiges Hilfsmittel bei der Arbeit mit dem MS HTML Parser ist die zugehörige Referenz im MS Platform SDK. Wenn du ihn nicht lokal auf deiner Platte gespeichert hast, dann kannst du sie auch im Internet einsehen: klick

Grüße vom marabu

huberlix 1. Okt 2006 18:40

Re: Spalten aus Tabelle im WebBrowser löschen
 
Das klingt gut. Hatte mir schon gedacht, das ich den Parser nehmen muss. Hatte ein paar threats weiter unten schon mal nach dem JvHtmlParser gefragt, und keine Antwort gekriegt.
Ist der MsHtmlParser bestandteil von D6? Kann ihn auf der Palette nicht finden?
Allerdings will ich das ganze nicht in ner Stringgrid speichern, sondern wieder im Browser anzeigen und dann den Browser Editierbar machen.
Sollte aber kein Problem sein, das umzustricken.
Werds mir jetzt erstmal anschaun.

Danke

PS: Woher kennst du meinen Vornamen?

mkinzler 1. Okt 2006 18:42

Re: Spalten aus Tabelle im WebBrowser löschen
 
Zitat:

Ist der MsHtmlParser bestandteil von D6? Kann ihn auf der Palette nicht finden?
Nein er ist Bestandteil des IE. Schau dir doch Achims Beispiel an.
[Edit:
Zitat:

PS: Woher kennst du meinen Vornamen?
Achim kennt jeden ;-)]

huberlix 1. Okt 2006 18:45

Re: Spalten aus Tabelle im WebBrowser löschen
 
Fehler: TxpManifest nicht gefunden!??

mkinzler 1. Okt 2006 18:47

Re: Spalten aus Tabelle im WebBrowser löschen
 
Zitat:

Zitat von huberlix
Fehler: TxpManifest nicht gefunden!??

>= D? dann erweitere Uses um XPMan

huberlix 1. Okt 2006 18:49

Re: Spalten aus Tabelle im WebBrowser löschen
 
XPMan steht schon drin!

[Fataler Fehler] DemoFrm.pas(7): Datei nicht gefunden: 'XPMan.dcu'

mkinzler 1. Okt 2006 18:50

Re: Spalten aus Tabelle im WebBrowser löschen
 
Welche Delphiversion hast du?

huberlix 1. Okt 2006 18:51

Re: Spalten aus Tabelle im WebBrowser löschen
 
D6 Enterprise

mkinzler 1. Okt 2006 18:52

Re: Spalten aus Tabelle im WebBrowser löschen
 
dann mußt du alles was mit dem manifest zu tun hast aus dem Projekt entfernen, da dies erst mit D7 eingeführt wurde.

huberlix 1. Okt 2006 18:52

Re: Spalten aus Tabelle im WebBrowser löschen
 
OK, werds probiewren, muss jetzt aber zur Arbeit

huberlix 2. Okt 2006 07:39

Re: Spalten aus Tabelle im WebBrowser löschen
 
Habs jetzt mal durchgespielt. Aber ich glaub, dass ich nicht so ganz das was ich suche.
Wenn ich das richtig sehe, liest du aus dem HTML das benötigte raus, und füllst damit das Stringgrid.

Ich möchte aber das ganze wieder im Browser darstellen.
D.h. eigentlich will ich den HTML-Code verändern, und dann wieder im Browser anzeigen. Geht das irgendwie?

Ich will mal die Hintergründe ein bißchen darlegen:
Z.Z. lade ich den Code einer Seite, die ungefähr aussieht wie oben im Link zu sehen, mit GetHtml.

Dann gehe ich Zeichen für Zeichen durch. Da in der Tabelle ja immer wiederkehrende Tags zu finden sind an denen ich mich orientieren kann, wühle ich mich mit Pos() bis zu diesem Tag, suche dann z.B. das 5. <td>, dann kann ich den Wert auslesen.
Diese Werte speichere ich in einer Klasse.
Nun lade ich ein vorformatiertes ExcelBlatt in einen OleContainer und fülle dieses mit den Werten.
Funktioniert auch sehr gut, wenns auch umständlich ist.

Aber folgende Probleme tauchen auf:
1. Wenn der WebDesigner diese Tabelle meint, die Tabelle in irgendeiner Form verändern zu müssen, wenns auch nur ne Kleinigkeit ist (was jetzt schon gelegentlich vorkam), verzählt sich meine Zeichensuche und ich muss das Programm anpassen.

2. Demnächst sollen in der Tabelle auch Links erscheinen, mit denen wir irgendwelche Infos abrufen können. Diese lassen sich natürlich in Excel nicht abrufen.

Daher der Gedanke mit dem Browser. Dann kann die Tabelle aussehen wie sie will, ich zähle anhand der Spaltenüberschriften, welche Spalte nicht gebraucht wird und lösche sie dann.
Danach noch ein bißchen Zellen formatieren und fertig.

Also ganz lapidar gesagt: HTML laden, HTML Editieren, HTML im Browser darstellen.

Gruß Bernd

marabu 2. Okt 2006 08:25

Re: Spalten aus Tabelle im WebBrowser löschen
 
Guten Morgen Bernd,

Zitat:

Zitat von huberlix
Aber ich glaub, dass ich nicht so ganz das was ich suche.

es ist eine Demo, die bestimmte Techniken vorführt - mehr nicht.

Zitat:

Zitat von huberlix
Ich möchte aber das ganze wieder im Browser darstellen.

Dann kannst du den Code direkt mit dem Browser abrufen und beim Ereignis OnDocumentComplete() die Elemente entfernen, welche du nicht brauchst. Der Rest wird dann vom Browser (TWebBrowser) gerendert.

Nun zu deinen Hintergrund-Informationen:

Bei professioneller Vorgehensweise würde der Web-Designer sich auf die Bereitstellung der style sheets (CSS) beschränken und der Lieferant der Daten (content provider) würde diese als XML-Dokument oder über einen WebService bereitstellen (je nach Aktualitätsanforderung). Die beiden müssten sich dann noch einigen, ob HTML-Transformationen (XSL-T) benötigt werden und wer diese erstellt. Der aktuelle von dir geschilderte Weg ist suboptimal - um es vorsichtig zu umschreiben.

Was Excel bei dem ganzen Prozess zu suchen hat verstehe ich auch nicht. Wird eine Druckausgabe mit Absatzkontrolle benötigt, dann würde ich das aus Delphi heraus mit einem Report Generator (z.B. RAVE) erledigen. Wenn auf Schnick-Schnack verzichtet werden kann, dann reicht die Druckausgabe des Browsers - eventuell über ein print template gesteuert.

Die beiden von dir geschilderten Probleme (Anpassen des Parsers, aktive Links) sind bei dem von mir beschriebenen Vorgehen übrigens auch vom Tisch.

Grüße vom marabu

huberlix 2. Okt 2006 09:11

Re: Spalten aus Tabelle im WebBrowser löschen
 
Zitat:

Zitat von marabu
es ist eine Demo, die bestimmte Techniken vorführt - mehr nicht.

Ist mir klar, ich wollte auch keinen fertigen Code. Der Weg ist das Ziel :-)
Hab mir das ganze halt selbst beigebracht, und da sind sicher noch immense Lücken.

Zitat:

Zitat von marabu
Dann kannst du den Code direkt mit dem Browser abrufen und beim Ereignis OnDocumentComplete() die Elemente entfernen, welche du nicht brauchst. Der Rest wird dann vom Browser (TWebBrowser) gerendert.

Ja und genau da liegt meine Frage. Kann ich in OnDocumentComplete() eine ganze Spalte entfernen nach dem Motto ...Col(5).delete, bzw formatieren cell(3,6).font......
Oder muss ich wieder den Quelltext nach einzelnen Tags durchsuchen und Tag für Tag löschen?

Dass das ganze sehr unprofessionell ist, ist mir auch klar. Wie gesagt, Lücken.. und es ist meine erste Browseranwendung.

Das Webdesign, bzw Bereitstellen der Daten, wird wohl schon auf eine der von dir beschriebenen Weise funktionieren, kenn mich da nicht aus. Ich weiß nur, dass die Daten alle aus einer (oder verschiedenen) Datenbanken kommen. Erstens komm ich da aber nicht dran, und zweitens weiß ich nicht wie es geht.
D.h. nicht, dass ich hier verbotenerweise Daten abrufe, wenn das jetzt so klingt. Ich käm sicher mit Hilfe meiner Vorgesetzten ran, die sind froh über meine Anwendung. Aber dann wird das ganze schon wieder zu aufwendig. Wir könnten mit dem Ausdruck der Original-Tabelle arbeiten, jedoch ist das ganze für unsere Zwecke viel zu überladen. Daher meine angepasste Tabelle.

Excel ist deshalb drin, weil ich das ganze zuerst mit Excel VBA gemacht habe. Und danach habe ich halt das vorgefertigte Excelblatt einfach in Delphi eingebunden und mit Daten gefüllt.
Das ganze muss halt in der Breite genau auf ne A3-Seite passen.
Ich denk, wenn ich die Tabelle im Format anpasse, reicht der Browser-Ausdruck vollkommen aus.

Mit dem Rave muss ich mir mal anschauen.

Gruß Bernd

mkinzler 2. Okt 2006 09:14

Re: Spalten aus Tabelle im WebBrowser löschen
 
Zitat:

.Col(5).delete, bzw formatieren cell(3,6).font......
Oder muss ich wieder den Quelltext nach einzelnen Tags durchsuchen und Tag für Tag löschen?
Einfacher wie Löschen, wäre wie schon erwähnt das Ausblenden durch die Manipulation des Style (Hinzufügen von
XML-Code:
visibility:hidden;
)

huberlix 2. Okt 2006 14:48

Re: Spalten aus Tabelle im WebBrowser löschen
 
Ach jetzt versteh ich erst was du meintest mit "ausblenden".

Hast du ein kleines Codeschnipsel, wie das verwendet wird?
Aber auch hier muss ich dann jedes 5. <td> in jedem <tr> ausblenden,um die 5. Spalte zu löschen, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz