HTML dateien mit VBA durchsuchen
Hallo Zusammen
Ich habe für mein Problem leider keine passende Lösung im Forum gefunden.
Ich habe in mehreren Ordnern .html dateien.
Mit einem Makro möchte ich
1)ein Ordner auswählen können
2) und in diesem Ordner sämtliche .html dateien durchsuchen
3) falls in einer der Dateien der Begriff </Table> mehr als 3 mal vorkommt,
4) soll das Makro nach dem 3. </Tabel> bis auf das vor letzte die folgende Zeile einfügen
"<h3 style="page-break-before:always"></h3>"
Meine .html dateien haben ca. 3 bis 10 Tabellen.
BSP Html Datei:
<HTML>
<HEAD>
.......
</HEAD>
<TABLE CELLSPACING=0 CELLPADDING=4 WIDTH=780 BORDER=1>
<TR VALIGN="MIDDLE">
<TD VALIGN="TOP" WIDTH=162 ALIGN="LEFT"><B>GF91.30-E-0003CW</B></TD>
<TD VALIGN="TOP" WIDTH=531 ALIGN="LEFT"></TD>
<TD VALIGN="TOP" WIDTH=63 ALIGN="LEFT"><B>3.5.07</B></TD></TR>
</TABLE>
-----> Hier nicht
<P>
<TABLE CELLSPACING=0 CELLPADDING=0 WIDTH="780" VALIGN="TOP">
<TR VALIGN="TOP">
<TD ALIGN="LEFT">
<TABLE CELLSPACING=0 CELLPADDING=0 VALIGN="TOP">
</TABLE>
<P>
-----> Hier nicht
<BR>
<TABLE WIDTH=784 BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN="TOP">
<TD VALIGN="TOP" ALIGN="LEFT" WIDTH=366>
</TABLE>
-----> Ab Hier <h3 style="page-break-before:always"></h3>
<P>
<TABLE WIDTH=784 BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN="TOP">
<TD VALIGN="TOP" ALIGN="LEFT" WIDTH=366>
</TABLE>
-----> Hier <h3 style="page-break-before:always"></h3>
<P>
<TABLE WIDTH=784 BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN="TOP">
<TD VALIGN="TOP" ALIGN="LEFT" WIDTH=366>
</TABLE>
-----> und Hier <h3 style="page-break-before:always></h3>
<TABLE WIDTH=784 BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN="TOP">
<TD VALIGN="TOP" ALIGN="LEFT" WIDTH=366>
</TABLE>
-----> Hier nicht
</BODY>
</HTML>
Für jede Hilfe bin ich Dankbar!
mfg Hdm
Antwort schreiben
Antwort 1 von rfb vom 21.05.2019, 13:03 Options
Wieso missbrauchst eine inhaltsleere Überschrift dritten Grades für ein Layout-Problem? Meinst du nicht auch, dass es sinnvoller wäre dies - nein, nicht dem ebenfalls überflüssigen leeren <P> - korrekterweise der betreffenden Tabelle zuzuordnen?
Antwort 2 von HdM vom 21.05.2019, 13:38 Options
Wieso denn inhaltsleer? Was gibts denn da nicht zu verstehen?
Antwort 3 von rfb vom 21.05.2019, 14:17 Options
Zitat:
Wieso denn inhaltsleer?
so nennt man nun mal leere Behälter!
Zitat:
Was gibts denn da nicht zu verstehen?
für sowas habe ich grundsätzlich kein Verständnis!
Antwort 4 von Hdm vom 21.05.2019, 14:27 Options
Keiner hat dich nach deinem Verständnis gefragt... !!
Wenns dir nicht passt oder besser gesagt wenn du keine Ahnung von nix hast dann musst du auch nichts schreiben kannst einfach gehen!
Dir gehört das Forum nun mal net!!!
PS: Wenn du unbedingt was schreiben willst
dann --> www.kaffee-klatsch-für-frauen.de
Adios
Antwort 5 von rfb vom 21.05.2019, 14:38 Options
hier mal ein
JavaScript, das die gleiche Funktionalität - allerdings userseitig ausführt:
<script type="text/javascript">
function tabellenumbruch() {
var tabs=document.getElementsByTagName("table");
for (var t=2;t<tabs.length;t++) {
if (tabs[t].className && tabs[t].className!="") tabs[t].className = "bruchdavor";
else tabs[t].className += " bruchdavor";
}}
window.onload=tabellenumbruch;
}
</script>
Dies setzt im Stylesheet natürlich eine entsprechende Klasse voraus:
<style type="text/css">
.bruchdavor {
page-break-before:always;
}
</style>
Beides ist hier für den Einsatz im head-Bereich vorgesehen - eine Auslagerung in externe Dateien wäre aber vorzuziehen.
Funktion:
nach dem Laden der Seite (
onload
) wird jeder Tabelle (
getElementsByTagName("table")
) ab der dritten (
var t=2
, die erste Tabelle hat den Index 0 ) eine Klasse (
className =
oder
className +=
)
bruchdavor verpasst.
Was die Klasse beinhaltet wird im Stylesheet festgelegt (wodurch das ganze deutlich einfacher zu warten ist).
Antwort 6 von rfb vom 21.05.2019, 14:43 Options
Zitat:
Keiner hat dich nach deinem Verständnis gefragt... !!
steht im Widerspruch zu
Zitat:
Was gibts denn da nicht zu verstehen?
Ach ja - die Logik!
Zitat:
kaffee-klatsch-für-frauen
meinst du nicht auch, dass du dich für diese
diskrimierende Äußerung bei den Forumsteilnehmerinnen umgehend entschuldigen solltest?
Antwort 7 von Hdm vom 21.05.2019, 15:08 Options
Du hast leider nicht mal die Frage verstanden!!
Aber es ist gut!!
Antwort 8 von rfb vom 21.05.2019, 15:38 Options
Zitat:
Du hast leider nicht mal die Frage verstanden!!
doch doch - keine Sorge. Ich habe bloß einen alternativen Lösungsvorschlag (sorry falls ich mich da für dich nicht klar genug ausgedrückt habe) sowie im ersten Posting eine Kritik an deinem semantisch inkorrektem HTML geschrieben.
Antwort 9 von Hdm vom 21.05.2019, 17:02 Options
Zitat:
Ich habe bloß einen alternativen Lösungsvorschlag
wenn du die Überschrift gelesen hättest würdest du nicht sowas posten!!
Um es klar zu stellen meine HTML Codierung sollte nur einen Überblick geben und hatte nicht die Aufgabe irgendetwas darzustellen!! ob da ein <p> weniger oder mehr ist macht doch kein unterschied.
Deine Aktion ist bloß ne rummeckerei gewesen und macht kein Sinn!!
Antwort 10 von Äxcel vom 13.06.2019, 15:08 Options
Hallo!
Dieses Makro sollte das machen:
verzeichnis = "c:\html"
h3 = "<h3 style=""page-break-before:always""></h3>" & vbCr & vbLf
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each file In FSO.GetFolder(verzeichnis).Files
If Right(LCase(file), 5) = ".html" Then
temp = FSO.GetTempName
Set iFile = FSO.OpenTextFile(file)
Set oFile = FSO.OpenTextFile(temp, 2, True)
counter = 0
puffer = ""
While Not iFile.AtEndOfStream
zeile = iFile.ReadLine
If counter > 2 Then
If InStr(LCase(zeile), "</table>") Then
oFile.Write h3 & puffer & zeile & vbCr & vbLf
puffer = ""
Else
If zeile <> Left(h3, Len(h3) - 2) Then
puffer = puffer & zeile & vbCr & vbLf
End If
End If
Else
If InStr(LCase(zeile), "</table>") Then
counter = counter + 1
End If
oFile.WriteLine zeile
End If
Wend
iFile.Close
oFile.Write puffer
oFile.Close
FSO.CopyFile temp, file, True
FSO.DeleteFile temp
End If
Next
Den Quelltext für einen Verzeichnisdialog findest Du da:
http://www.herber.de/mailing/106700h.htm
Ich garantiere nicht, dass Nichts kaputt gehen kann!
Vor Datenverlust schützt ein Backup!