Condividi:        

Trasformare celle con formattazioni in html

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Trasformare celle con formattazioni in html

Postdi servicedynergy » 04/03/25 14:33

Ciao a tutti e grazie in anticipo.
Ho un file in excel dove nella colonna A ho il mio codice SKU mentre nella colonna B delle descrizioni di prodotto formattate con: a capo obbligati, grassetti, corsivi, sottolineati, colori nel testo e link. tutto formattato internamente in excel o copiato da word. C'è la possibilità di trasformare o nello stesso excel o in un altro file queste descrizioni in linguaggio html? sotto esempio:

SKU Descrizione
0007544 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam in metus risus. Nullam dignissim lobortis cursus. Fusce dignissim sed turpis eget egestas. Donec eu ante ultrices, pellentesque sem quis, accumsan enim. Vivamus consectetur nisl elit, at volutpat nisi aliquet a. Nunc pharetra malesuada aliquam. Ut vitae libero imperdiet, sodales leo vitae, cursus velit.
    - Nulla tristique
    - tortor a semper efficitur.
    - Cras aliquam, sem vitae molestie fermentum, ipsum est congue nisl, id ornare augue risus eget est.

Aenean imperdiet tempor sapien a tempor. Pellentesque tristique venenatis mauris et cursus. Ut feugiat justo sed justo venenatis iaculis. Curabitur placerat tortor nec leo fringilla efficitur nec non ante.[url]Maecenas iaculis[/url] gravida nisi, at vestibulum sapien faucibus laoreet. Morbi ac elementum est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus ullamcorper finibus lacus, ac efficitur elit sodales eu. Maecenas quis nulla auctor, bibendum diam ut, suscipit quam


il testo che ne dovrebbere risultare sarebbe lo stesso ma con la formattazione classica di html (b) (/list) etc...

è possibile?
grazie
servicedynergy
Newbie
 
Post: 8
Iscritto il: 21/07/15 14:12

Sponsor
 

Re: Trasformare celle con formattazioni in html

Postdi Anthony47 » 04/03/25 19:52

Prova salvando il file in formato .mht (pagina web in file unico) oppure .htm (pagina web)
Avatar utente
Anthony47
Moderatore
 
Post: 19575
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasformare celle con formattazioni in html

Postdi Dylan666 » 07/03/25 10:24

Purtroppo il file HTML che esce da Excel è molto "sporco" e inutilmente complicato.
Ma lo devi fare un volta ogni tanto o in maniera ricorrente e da automatizzare?
Avatar utente
Dylan666
Moderatore
 
Post: 40173
Iscritto il: 18/11/03 16:46

Re: Trasformare celle con formattazioni in html

Postdi servicedynergy » 07/03/25 15:12

Ciao, intanto grazie.
L'idea sarebbe questa. Ho circa 5000 descrizioni di prodotto in una colonna di excel che sono formattate con corsivi, grassetti, sottolineati, link, elenchi e colori del testo. La formattazione è come in un file di word quindi è dentro la cella. Ora per gestire il mio sito su Shopify ho bisogno che queste descrizioni siano scritte in html per caricarle sopra. Sto cercando di fare una macro che riesca a convertirmi il testo formattato nella colonna susseguente, così da darlo poi in pasto a Shopify. Di seguito vi riporto come deve essere il testo formattato (testo1), come lo converte il backend di shopify (testo 2) e a che punto sono arrivato alla scrittura della macro, che funziona ma mi da ancora dei piccoli errori da mettere a posto ma che io non rieco. Per scrivere la macro mi sono fatto aiutare da chatgpt. Se vi può essere di aiuto partire da qui. Grz

TESTO 1
RENOFRESH MURO 150 è un'unità di recupero calore residenziale murale composto da ventola di mandata, ventola di ritorno, scambiatore di calore, filtro primario, filtro a carboni attivi e filtri HEPA. La rapidità e la semplicità di installazione permettono un montaggio e messa in funzione in meno di un'ora, con la possibilità di orientare il flusso d'aria sul retro o sul fianco.
RENOFRESH MURO può svolgere le seguenti funzioni:

    - Purificazione dell'aria di mandata: dopo che l'aria esterna veicolata dal ventilatore passerà attraverso il filtro primario e sullo scambiatore di calore, subirà un'ulteriore filtrazione dal filtro HEPA, in modo da migliorare la qualità dell'aria interna.
    - Modalità "Auto": per garantire una quantità sufficiente di aria fresca interna, la velocità di funzionamento aumenterà autonomamente dopo che la funzione "Auto" verrà attivata.
    - Modalità Timer, in cui è possibile impostare l'orario di accensione e spegnimento direttamente dal comodo telecomando incluso, e Modalità Sleep, che permette di abbassare a velocità minima il ventilatore per il massimo della silenziosità.
    - Funzione "Pure" permette un ricambio aria ambientale ultra rapido.

CARATTERISTICHE TECNICHE:

    - Portata aria nominale 150 mc/h
    - Alimentazione elettrica 230 / 1 / 50-60 V/Ph/Hz
    - Potenza elettrica assorbita massima 35 W
    - Classificazione IP IPX2
    - Volume di utilizzo 20- 45 mq
    - Tipologia motore DC / 8 speeds
    - Efficienza termica 0,82 %
    - Efficacia di filtrazione 99% HEPA
    - Tipologia di installazione Retro / Lato
    - Livello di pressione sonora irradiato dall’involucro 36 dB (A)

[url]prova link[/url]

TESTO 2

"<p><strong>RENOFRESH MURO 150</strong> è un'unità di recupero calore residenziale murale composto da ventola di mandata, ventola di ritorno, scambiatore di calore, filtro primario, filtro a carboni attivi e filtri HEPA. La rapidità e la semplicità di installazione permettono un montaggio e messa in funzione in meno di un'ora, con la possibilità di orientare il flusso d'aria sul retro o sul fianco.<br><strong><em>RENOFRESH MURO</em></strong> può svolgere le seguenti funzioni:</p>
<ul style="text-align: left;">
<li class="MsoNormal" style="line-height: normal;">Purificazione dell'aria di mandata: dopo che l'aria esterna veicolata dal ventilatore passerà attraverso il filtro primario e sullo scambiatore di calore, subirà un'ulteriore filtrazione dal filtro HEPA, in modo da migliorare la qualità dell'aria interna.</li>
<li class="MsoNormal" style="line-height: normal;">Modalità "Auto": per garantire una quantità sufficiente di aria fresca interna, la velocità di funzionamento aumenterà autonomamente dopo che la funzione "Auto" verrà attivata.</li>
<li class="MsoNormal" style="line-height: normal;">Modalità Timer, in cui è possibile impostare l'orario di accensione e spegnimento direttamente dal comodo telecomando incluso, e Modalità Sleep, che permette di abbassare a velocità minima il ventilatore per il massimo della silenziosità.</li>
<li class="MsoNormal" style="line-height: normal;">Funzione "Pure" permette un ricambio aria ambientale ultra rapido.</li>
</ul>
<p style="text-align: left;"><span style="text-decoration: underline;"><em><strong>CARATTERISTICHE</strong></em></span><em><strong> </strong><strong>TECNICHE</strong></em><em><strong>:</strong></em></p>
<ul style="text-align: left;">
<li>Portata aria nominale 150 mc/h</li>
<li>Alimentazione elettrica 230 / 1 / 50-60 V/Ph/Hz</li>
<li>Potenza elettrica assorbita massima 35 W</li>
<li>Classificazione <strong><span style="color: rgb(255, 42, 0);">IP <span style="color: rgb(128, 255, 0);">IPX2</span></span></strong>
</li>
<li>Volume di utilizzo 20- 45 mq</li>
<li>Tipologia motore DC / 8 speeds</li>
<li>Efficienza termica 0,82 %</li>
<li>Efficacia di filtrazione 99% HEPA</li>
<li>Tipologia di installazione Retro / Lato</li>
<li>Livello di pressione sonora irradiato dall’involucro 36 dB (A)</li>
</ul>
<p style="text-align: left;"><a href="www.dynergysrl.it" rel="noopener" target="_blank">prova link</a><br></p>"

TESTO 3
Sub FormattaTestoInHtml()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("input")

Dim htmlText As String
Dim i As Integer
Dim char As String
Dim bold As Boolean, italic As Boolean, underline As Boolean
Dim prevBold As Boolean, prevItalic As Boolean, prevUnderline As Boolean
Dim color As Long, prevColor As Long
Dim htmlChunk As String
Dim cell As Range
Dim totalRows As Long
Dim currentRow As Long
Dim inList As Boolean
Dim isInLink As Boolean

totalRows = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' Calcola il numero totale di righe
currentRow = 1 ' Inizia dalla prima riga
inList = False
isInLink = False

' Scansiona ogni cella nella colonna B
For Each cell In ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
htmlText = "<p>" ' Inizia il paragrafo
prevBold = False
prevItalic = False
prevUnderline = False
prevColor = cell.Characters(1, 1).Font.Color

' Legge ogni carattere singolarmente
For i = 1 To Len(cell.Value)
char = Mid(cell.Value, i, 1)

' Verifica se la riga inizia con "-" per l'elenco
If Left(Trim(cell.Value), 1) = "-" Then
If Not inList Then
htmlText = htmlText & "<ul>" ' Inizia una lista non ordinata
inList = True
End If
htmlText = htmlText & "<li>" & Trim(Mid(cell.Value, i + 1)) & "</li>" ' Aggiungi l'elemento dell'elenco
Exit For ' Esce dal ciclo per l'elenco
ElseIf char = vbLf Then
' Gestione a capo (inserisce <br> quando trova un a capo)
htmlText = htmlText & "<br>"
Else
' Ottieni le proprietà di formattazione del carattere
bold = cell.Characters(i, 1).Font.Bold
italic = cell.Characters(i, 1).Font.Italic
underline = (cell.Characters(i, 1).Font.Underline <> xlUnderlineStyleNone)
color = cell.Characters(i, 1).Font.Color

' Apre tag HTML se cambia formattazione
If bold <> prevBold Then htmlChunk = htmlChunk & IIf(bold, "<strong>", "</strong>")
If italic <> prevItalic Then htmlChunk = htmlChunk & IIf(italic, "<em>", "</em>")
If underline <> prevUnderline Then htmlChunk = htmlChunk & IIf(underline, "<u>", "</u>")

' Gestione colore (legge il colore effettivo applicato)
If color <> prevColor Then
If color <> RGB(0, 0, 0) Then ' Se non è nero, applica il colore
htmlChunk = htmlChunk & "<span style='color:#" & Right("000000" & Hex(color), 6) & "'>"
Else ' Se torna nero, chiude lo span
htmlChunk = htmlChunk & "</span>"
End If
End If

' Aggiunge il carattere
htmlText = htmlText & htmlChunk & char
htmlChunk = "" ' Reset per il prossimo carattere

' Aggiorna i valori precedenti
prevBold = bold
prevItalic = italic
prevUnderline = underline
prevColor = color
End If
Next i

' Chiude eventuali tag aperti
If prevBold Then htmlText = htmlText & "</strong>"
If prevItalic Then htmlText = htmlText & "</em>"
If prevUnderline Then htmlText = htmlText & "</u>"
If prevColor <> RGB(0, 0, 0) Then htmlText = htmlText & "</span>"

' Chiude la lista
If inList Then
htmlText = htmlText & "</ul>"
inList = False
End If

' Gestione dei link separata (aggiungi link se presente)
If InStr(cell.Value, "http://") > 0 Or InStr(cell.Value, "https://") > 0 Then
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.IgnoreCase = True
regex.Global = True
regex.Pattern = "(http[s]?://[^\s<>]+)"
htmlText = regex.Replace(htmlText, "<a href='$1' target='_blank' rel='noopener'>$1</a>")
End If

htmlText = htmlText & "</p>" ' Chiude il paragrafo

' Scrive il risultato in colonna C
cell.Offset(0, 1).Value = htmlText

currentRow = currentRow + 1
Next cell
End Sub

Gli errori che non riesco a risolvere sono:
non gestisce gli elenchi (mi piacerebbe che se a inizio riga e dopo un a capo c'è il segno "-" individua che è un elenco;
non gestisce bene i colori (nella formattazione IP è rosso e lui lo riporta come blu; mentre il verde è a posto);
la macro è molto lenta (forse il problema è l'AI che complica la macro inserendo del codice superfluo);
mi piacerebbe che ci fosse un avanzamento della macro per sapere che la macro sta lavorando, quanto manca in percentuale e quando ha finito.
grazie!
servicedynergy
Newbie
 
Post: 8
Iscritto il: 21/07/15 14:12

Re: Trasformare celle con formattazioni in html

Postdi Anthony47 » 07/03/25 17:57

Rimango sulla mia idea di usare quanto Excel gia' fa di suo.
In aggiunta all'ipotesi di salvare il file in formato html (che ha la max utilita' quando si vuole visualizzare tutto il file come pagina web) segnalo la possibilità di usare la funzione RangePublish, come ad esempio suggerito ad altro utente qui:
http://www.pc-facile.com/forum/viewtopi ... 89#p652879

Il codice della funzione:
Codice: Seleziona tutto
Function RangePublish(ByVal mySh As String, ByVal PRan As String) As Variant
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=101351
'
Dim TmpFile As String, myBDT As String, PubFile
TmpFile = Environ("Temp") & "\myBDT.htm"    'Lavora in Temp
'Crea file html:
With ThisWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, _
    Filename:=TmpFile, _
    Sheet:=mySh, _
    Source:=PRan, _
    HtmlType:=xlHtmlStatic)
    .Publish (True)
End With
'
Set FSO = CreateObject("Scripting.FilesystemObject")
Set PubFile = FSO.OpenTextFile(TmpFile, 1, False)
  RangePublish = PubFile.ReadAll
PubFile.Close
'
End Function

Bisogna "passare" alla funzione il nome del foglio e l'area da convertire, ambedue in formato testo. Tipo
Codice: Seleziona tutto
=RangePublish("Foglio2";"A2:D100")

La funzione crea un file myBDT.htm nella directory Temp dell'utente, ma scrive il risultato anche nella cella in cui hai inserito la formula; quindi puoi ottenere piu' risultati relativamente a piu' range scrivendo piu' formule in celle diverse
Avatar utente
Anthony47
Moderatore
 
Post: 19575
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasformare celle con formattazioni in html

Postdi Anthony47 » 07/03/25 18:29

Forse e' meglio usare questo codice per la Function:
Codice: Seleziona tutto
Function RangePublish2(ByVal myRan As Range) As Variant
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26
'
Dim TmpFile As String, myBDT As String, PubFile
TmpFile = Environ("Temp") & "\myBDT.htm"    'Lavora in Temp
Debug.Print TmpFile

'Crea file html:
With ThisWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, _
    Filename:=TmpFile, _
    Sheet:=myRan.Parent.Name, _
    Source:=myRan.Address, _
    HtmlType:=xlHtmlStatic)
    .Publish (True)
End With
'
Set FSO = CreateObject("Scripting.FilesystemObject")
Set PubFile = FSO.OpenTextFile(TmpFile, 1, False)
  RangePublish2 = PubFile.ReadAll
PubFile.Close
'
End Function

In questo modo nella formula devi solo "passare" l'indirizzo completo nella sintassi Excel (nome foglio e intervallo); tipo:
Codice: Seleziona tutto
=RangePublish2(Foglio2!A2:E3)
Il vantaggio, a parte la migliore aderenza alla sintassi delle formule Excel, e' che quando modifichi l'area inserita nella formula il codice viene ricalcolato. Ricorda pero' che una formattazione non corrisponde a una vera modifica; quindi se cambi il colore di un testo o di una cella dovrai forzare tu il ricalcolo, e il modo piu' semplice e' fingere di modificare il valore della cella usando in sequenza i tasti F2 (edit) e poi Enter
Avatar utente
Anthony47
Moderatore
 
Post: 19575
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Trasformare celle con formattazioni in html":


Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti