• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Bullets vervangen door HTML tag

Status
Niet open voor verdere reacties.

Robert09

Gebruiker
Lid geworden
6 dec 2012
Berichten
34
Hallo,

Ik heb een groot Excel bestand waarvan ik de opsommingen wil vervangen door de betreffende HTML tag.
Ook zit ik met het probleem dat ik de regeleinden niet lekker kan verwerken/vervangen met bijvoorbeeld een </br>.

Is er bij één van jullie hiervoor een formule bekend of een andere tip waarmee ik de lijst met omschrijving kan aanpassen en kan inladen in een database.

Ik heb de volgende NIET werkende formule voor de bullets in elkaar geknutseld.

Code:
=LINKS(A8;ZOEKEN("•";A8)-1) &"<ul><li>" & SUBSTITUEREN(RECHTS(A8;LENGTE(A8)-ZOEKEN("•";A8));"•";"</li><li>") &"</li></ul>"
Bekijk bijlage Omschrijvingen voorbeeld helpmij forum.xlsx

Graag hoor ik wat jullie ideeën hierover zijn.

Met vriendelijke groet,

Robert
 
de enters zijn toch duidelijk in je voorbeeld met _x000d_ die je kunt vervangen door BR ? Ik begrijp alleen niet waarom je naar HTML wil voor een database?

Een en ander is waarschijnlijk wel te doen met een macro (daar zijn ze immers voor) maar kun je in je voorbeeld er ook een cel uithalen en laten zien hoe volgens jou de HTML eruit moet zien van die cel? Ook goed kijken hoeveel variatie en uitzonderingen je verwacht.

Overigens heeft microsoft een ingebouwde functie om tekst om te zetten in HTML, dus als de originele data niet geheel vermangeld is, kun je misschien dit nog wel doen met een standaard functie.
 
De omschrijvingen worden ingeladen op de website, echter moet ik dit aanleveren in platte tekst.

Ik heb in de bijlage een voorbeeld gedaan van hoe ik graag het resultaat gehad zou willen hebben.
Graag zou ik willen weten wat voor oplossing hiervoor mogelijk is.

Bekijk bijlage Voorbeeld gewenst resultaat.xlsx

Groet Robert
 
Je kan de enters vervangen door <br> m.b.v. de volgende code:
Code:
=SUBSTITUEREN(A1;TEKEN(10);"<br>")
Of de bullets en de enters gelijk met:
Code:
=SUBSTITUEREN((SUBSTITUEREN(A2;"•";"<li>"));TEKEN(10);"<br>"&TEKEN(10))

Je ontkomt er volgens mij niet aan om handmatig de code door te lopen... alles automatiseren duurt waarschijnlijk langer (als het al mogelijk is).
 
Laatst bewerkt:
Zo te zien krijg je de gegevens al als platte tekst aangeleverd.
Dan is inlezen in Excel niet slim.
Gebruik in dit geval Word.
 
Ik heb het net even getest en de automatische converter van microsoft kan het bestand in principe prima aan. Als nadeel heeft het wel dat het de lijst converteert naar rechttoe rechtaan <BR> en geen list elementen aanmaakt.

Voor een "perfecte" conversie ben je dus aangewezen op een macro. Zoals SNB al suggereerde heeft Word wat meer uitgebreide mogelijkheden, maar mogelijk maakt die ook geen juiste list-items en moet je alsnog converteren. Overigens lijkt dat prima mogelijk met deze voorbeelden.

je gebruikt overigens <br></br> wat xhtml 4 is. beter dan <br /> gebruiken dat is compatibel met xhtml(4) en html5
 
Dank voor de snelle reacties, ik ben al een stuk verder geholpen.

Ik heb de code's gebruikt en ga deze dagen bezig met controle van de resultaten.

Dank voor de tips en oplossingen!!
 
probeer dit eens:

Code:
Sub t()
    mtext = [a2].Value
    
    Dim slijst() As String
    Dim dolist As Boolean
    
    dolist = False
    ReDim slijst(0)
    atext = Split(mtext, ChrW(13))
    
    For Each subtext In atext
        subtext = Trim(subtext)
        If AscW(Mid(subtext, 1, 1)) = 10 Then
            subtext = Right(subtext, Len(subtext) - 1)
        End If
        If Len(subtext) > 0 Then
            If AscW(Mid(subtext, 1, 1)) = 8226 Then
                If dolist = False Then
                    dolist = True
                    subtext = "<UL><LI>" + Right(subtext, Len(subtext) - 3) + "</LI>"
                Else
                    subtext = "<LI>" + Right(subtext, Len(subtext) - 3) + "</LI>"
                End If
            Else
                If dolist = True Then
                    subtext = "</UL>" + subtext + "<BR />"
                    dolist = False
                Else
                    subtext = subtext + "<BR />"
                End If
            End If
        Else
            If dolist = True Then
                    subtext = "</UL><BR />"
                    dolist = False
                Else
                    subtext = "<BR />"
                End If
            
        End If
        ReDim Preserve slijst(UBound(slijst) + 1)
        slijst(UBound(slijst) - 1) = subtext
    Next subtext
    ReDim Preserve slijst(UBound(slijst) - 1)
    MsgBox (Join(slijst))

End Sub
 
Lijkt goed te werken, ik ga ervan uit dat de tekst in de messagebox als voorbeeld dient.

Ik kom echter ook andere opsommingstekens tegen o.a. "-" en "*".
Is dit ook eenvoudig toe te voegen ?

Is het ook mogelijk om gelijk een bereik mee te geven, en de juiste uitkomst in de cel ernaast te plaatsen.

Dit zou me dagen werken schelen :rolleyes:
 
In principe kunnen meerdere lijsten herkend worden, maar daarom gaf ik al aan in mijn eerste reply:

Ook goed kijken hoeveel variatie en uitzonderingen je verwacht.

We kunnen alleen zo goed helpen als je voorbeeld is, we hebben geen glazen bol.

In principe werkt de macro al met een onafhankelijke lijst variabele (dolist) dus kun je in principe net zoveel "lijsttekens" definiëren als je wil, zonder dat er iets wezenlijks aangepast moet worden. Je moet echter wel testen of dan niet mogelijk de eerste letter van de regel wegvalt.

door een range lopen en resultaat ernaast plakken is heel eenvoudig, maar dan moeten we wel een echt voorbeeld hebben of in ieder geval de layout zoals je die ook werkelijk verwacht. Eigenlijk moet je ook eerst de tekst opschonen voordat je 'm verder verwerkt. Mijn macro werkt nu, maar er zitten nog zaken in als TAB's e.d.
 
Je hebt gelijk!

In de bijlage vind je het bestand zoals ik het vanaf de leverancier ontvangen heb.
Graag zou ik de bewerkte omschrijving in kolom B willen neerzetten.

Ook valt het mij op dat op de meest vreemde plaatsen "onzichtbare" karakters staan.

Ik hoop dat ik zo mijn vraag een stuk verduidelijkt heb.Bekijk bijlage Compleet beschrijvingen.xlsx
 
Code:
Sub M_snb()
    c00 = Cells(4, 1)

    y = InStrRev(c00, ChrW(8226))
    y1 = y + InStr(Mid(c00, y), vbCrLf) - 2
    c00 = Left(c00, y1) & "</li></ul>" & Mid(c00, y1)
    c01 = Replace(Replace(Replace(Replace(Replace(c00, ChrW(8226), "<li>"), "<li>", "<ul><li>", , 1), vbCrLf & "<li>", "</li>" & vbCrLf & "<li>"), vbCrLf & vbCrLf, "<br/><br/>" & vbLf & vbLf), vbCrLf, "<br/>" & vbLf)

    MsgBox c01
End Sub
 
Ik heb het even zo gedaan:
Code:
Function toHTML(mtext As String) As String
    'mtext = [a2].Value
    
    Dim slijst() As String
    Dim dolist As Boolean
    
    dolist = False
    ReDim slijst(0)
    atext = Split(mtext, ChrW(13))
    
    For Each subtext In atext
        subtext = Trim(subtext)
        On Error GoTo emptygo
        If AscW(Mid(subtext, 1, 1)) = 10 Then
            subtext = Right(subtext, Len(subtext) - 1)
        End If
        subtext = Replace(subtext, ChrW(9), "")
emptygo:
        If Len(subtext) > 0 Then
            If AscW(Mid(subtext, 1, 1)) = 8226 Then
                If dolist = False Then
                    dolist = True
                    subtext = "<UL><LI>" + Right(subtext, Len(subtext) - 2) + "</LI>"
                Else
                    subtext = "<LI>" + Right(subtext, Len(subtext) - 2) + "</LI>"
                End If
            Else
                If dolist = True Then
                    subtext = "</UL>" + subtext + "<BR />"
                    dolist = False
                Else
                    subtext = subtext + "<BR />"
                End If
            End If
        Else
            If dolist = True Then
                    subtext = "</UL><BR />"
                    dolist = False
                Else
                    subtext = "<BR />"
                End If
            
        End If
        ReDim Preserve slijst(UBound(slijst) + 1)
        slijst(UBound(slijst) - 1) = subtext
    Next subtext
    If UBound(slijst) > 1 Then
        ReDim Preserve slijst(UBound(slijst) - 1)
        toHTML = Join(slijst)
    Else
        toHTML = mtext
    End If
End Function

Sub t2()
     For Each checky In [a1:a1333]
        checky.Offset(0, 1).Value = toHTML(checky.Value)
    Next
End Sub

Kun jij zelf hiermee eventueel de nog bestaande uitzonderingen opsporen? ik kan dan eventueel aanpassingen maken, maar ik ga niet 1300 lijnen doorlopen op uitzonderingen ;)

ik heb in mijn versie even snel alle legen regels verwijderd om het te kunnen testen. Mocht je nog uitzonderingen vinden dan deze graag apart in een file zodat ik niet door honderden regels moet lopen om te testen en aan te passen.

de t2 sub is degene die je aan moet roepen
 
Hallo,

Ik heb zo juist weer een uitzondering gevonden, de volgende uitzondering heb ik gevonden in cel A188 van excel bestand Compleet beschreven.
Hier zit een opsomming in van 1. 2. etc en het opsommingsteken "-".

Is deze aanpassing eenvoudig te realiseren ? Zou je mij ook kunnen uitleggen wat je precies aan de code veranderd hebt zodat ik er ook iets van op kan steken :rolleyes:

Graag hoor ik van je
 
De code is niet veel veranderd. Ik heb de code robuuster gemaakt voor problemen, de uitvoer is nog exact hetzelfde als het eerste voorbeeld, behalve dat er ook eerst tabs gefilterd worden.

Er zitten uitzonderingen in voor lege regels en regels waar geen HTML wordt toegevoegd aan de bestaande tekst.

De "-" is niet zo'n probleem. De getallen-reeksen zijn wel een probleem. Er zijn daar 2 problemen mee:

- er moet ondersteuning zijn voor nested lists (lists in lists) om alle situaties af te vangen, wat momenteel niet kan met de huidige code
- er zijn veel regels die beginnen met 1 die geen opsomming zijn. Om dat af te vangen moet je forward looks in de code in gaan bouwen om te kijken of de volgende regel eventueel een 2 heeft etc. Dat is een heel stuk complexer. Niet onmogelijk, maar kost een stuk meer tijd. Hetzelfde geldt natuurlijk voor opsommingen met a) b) etc.

opsommingen met "-" en "*" kosten een paar minuten werk om toe te voegen. Ondersteuning voor nested lists en numbered lists is echter een heel andere ordegrootte. Niet onmogelijk, maar niet iets waar ik veel tijd in kan steken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan