Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

A2003: Importare Tabelle multiple HTML

67 views
Skip to first unread message

Giorgio

unread,
Jul 20, 2007, 4:31:52 PM7/20/07
to
Salve,
ho la necessità di importare delle tabelle da un file html.
All'interno del singolo file html ci sono tante tabelle e quindi, quando
utilizzo il wizard per l'importazione, sono costretto a ripetere
l'operazione tante volte quante tabelle ci sono nel file html.
Ce' la possibilità di importare tutte le tabella in una unica volta e, se
esiste, qual'è ?

Grazie e a buon rendere.
Giorgio

Sergio MAZZA

unread,
Jul 22, 2007, 4:11:18 AM7/22/07
to
"Giorgio" <Giorg.ioNo...@libero.it> ha scritto nel messaggio news:HY8oi.2895$mV....@tornado.fastwebnet.it...

Prova a leggere qui:
http://groups.google.it/group/it.comp.appl.access/browse_thread/thread/c0c9c7dbbe85225e/86fc23a1a31f1f37?lnk=gst&q=parsing+html+mazza&rnum=1&hl=it#86fc23a1a31f1f37

Ciao.
--
Sergio MAZZA

Giorgio

unread,
Jul 22, 2007, 5:55:49 PM7/22/07
to

'--> Microsoft Internet Controls
'--> Microsoft HTML Object Library

Tra i riferimenti trovo solo il secondo, il primo non lo riesco a trovare.
Forse devo istallare qualche software in particolare ?

Grazie intanto.
Giorgio


Giorgio

unread,
Jul 22, 2007, 5:58:16 PM7/22/07
to

>
> '--> Microsoft Internet Controls
> '--> Microsoft HTML Object Library
>
> Tra i riferimenti trovo solo il secondo, il primo non lo riesco a trovare.
> Forse devo istallare qualche software in particolare ?
>
> Grazie intanto.
> Giorgio
>

Risolto puntando il file Shdocvw.dll, (google rulez)
:P

Giorgio

unread,
Jul 22, 2007, 6:44:43 PM7/22/07
to

Ottimo, ora mi importa tutte le tabelle contemporaneamente.
Ho, però, 2 piccoli problemi:

a. alcuni caratteri non vengono interpretati bene in particolar modo quelli
austriaci/tedeschi (ö, ü, )
b."l'intestazione" della tabella viene importata prima (ovviamente) del
contenuto della stessa: nel primo campo di 2 righe precedente il set; è
possibile che questo contenuto venga aggiunto alle righe inerenti il set
stesso ?

mi spiego meglio, ora avviene:
--------------------
IintestazioneTabella1Html
Datainser
articolo 1
articolo 2

IntestazioneTabella2Html
DataInser
articolo X
articolo y
-------------------
io vorrei ciò:

IntestazioneTabella1Html
DataInser
Articolo1 IntestazioneTabella1Html
Articolo2 IntestazioneTabella1Html

IntestazioneTabella2Html
DataInser
Articolo X IntestazioneTabella2Html
ArticoloY IntestazioneTabella2Html
etc etc

ah, tutte iniziano con una stringa di 5 caratteri uguali, può essere l'uovo
di colombo ?

Grazie ancora ^^


Sergio MAZZA

unread,
Jul 23, 2007, 2:43:24 AM7/23/07
to
"Giorgio" <Giorg.ioNo...@libero.it> ha scritto nel messaggio
news:b5Roi.4151$mV....@tornado.fastwebnet.it...

>
> Ottimo, ora mi importa tutte le tabelle contemporaneamente.
> Ho, però, 2 piccoli problemi:
>
> a. alcuni caratteri non vengono interpretati bene in particolar modo
> quelli austriaci/tedeschi (ö, ü, )

Su questa cosa al momento non mi viene in mente nulla; sarà il Lunedì.
Magari aspettiamo che si svegli qualcun'altro.

Se ho capito bene, basta che memorizzi in una variabile il contenuto della
dell'intestazione; ogni volta che cambi tabella riscriverai il valore.
Comunque con il codice sott'occhio (forse) riusciamo a capirci meglio...

> Grazie ancora ^^


Ciao.
--
Sergio MAZZA


Giorgio

unread,
Jul 23, 2007, 3:24:31 PM7/23/07
to

> Se ho capito bene, basta che memorizzi in una variabile il contenuto della
> dell'intestazione; ogni volta che cambi tabella riscriverai il valore.
> Comunque con il codice sott'occhio (forse) riusciamo a capirci meglio...
>
> Sergio MAZZA

Buongiorno,
per il codice ti incollo quello che sto usando, sempre firmato da te:

'------------------------------------------------------------------------------------
'-->
'--> inserisci i riferimenti a:


'--> Microsoft Internet Controls
'--> Microsoft HTML Object Library

'-->

On Error GoTo LeggiTabellaHTML_err
Dim oBrws As New SHDocVw.InternetExplorer
Dim oDoc As MSHTML.IHTMLDocument
Dim oTbl As Object 'MSHTML.IHTMLTable
Dim oTblRw As Object 'MSHTML.IHTMLTableRow
Dim oTblCll As Object 'MSHTML.IHTMLTableCell

oBrws.Navigate2 "c:\documenti\nomePagina.htm"

Do
If oBrws.readyState = READYSTATE_COMPLETE Then
Exit Do
End If
DoEvents
Loop

Set oDoc = oBrws.Document

Dim rst As New ADODB.Recordset
rst.Open "nometabella", CurrentProject.Connection, adOpenDynamic,
adLockOptimistic

For Each oTbl In oDoc.getElementsByTagName("TABLE")
'--> oppure: getElementsByID("id") / getElementsByName("name")

'--> per avere il numero delle righe della tabella: objTabella.rows.length
For Each oTblRw In oTbl.Rows
rst.AddNew '<-- aggiungo il record
a = 0
For Each oTblCll In oTblRw.Cells
'Debug.Print oTblCll.innerText
rst(a) = oTblCll.innerText '<-- scrivo il contenuto delle celle nei
campi
a = a + 1
Next oTblCll

rst.Update '<-- scrivo il record

Next oTblRw
Next oTbl

rst.Close
Set rst = Nothing

Set oTbl = Nothing
Set oTblRw = Nothing
Set oTblCll = Nothing
Set oDoc = Nothing
Exit Sub

LeggiTabellaHTML_err:
DoCmd.SetWarnings True
Set oTbl = Nothing
Set oTblRw = Nothing
Set oTblCll = Nothing
Set oDoc = Nothing
MsgBox "Errore: " & Application.AccessError(Err.Number) & vbCrLf &
"Riga: " & Erl & vbCrLf & "Numero: " & Err.Number
' ---------------------------------------------------------------------------------------

Con questo metodo mi importa le intestazioni delle tabellehtml su righe
separate dal set di record, es:

IintestazioneTabella1Html
Datainser
articolo 1
articolo 2

IntestazioneTabella2Html
DataInser
articolo X
articolo y

io vorrei ottenere ciò (riportare il contenuto della intestazione in tutti i
record del set relativo) :

IntestazioneTabella1Html
DataInser
Articolo1 IntestazioneTabella1Html
Articolo2 IntestazioneTabella1Html

IntestazioneTabella2Html
DataInser
Articolo X IntestazioneTabella2Html
ArticoloY IntestazioneTabella2Html

("IntestazioneTabbella1Html" è l'intestazione della prima tabella nel file
HTML;
"IntestazioneTabella2Html" è l'intestazione della seconda tabella sempre
dello stesso file html;
"IntestazioneTabella3Html" è l'intestazione della terza tabella sempre dello
stesso file html )
etc .etc.

è possibile ottenere ciò anche tenendo conto che l'inizio del contenuto è
sempre identico per tutte le tabelle dello stesso file html ?

Mi sono spiegato quasi come un libro stracciato eh... -.-


Ciao e grazie,
Giorgio


Sergio MAZZA

unread,
Jul 24, 2007, 6:04:39 AM7/24/07
to
"Giorgio" <Giorg.ioNo...@libero.it> ha scritto nel messaggio
news:Zf7pi.864$pd1...@tornado.fastwebnet.it...


Azz... Neanche a provarci eh?
Non mi serve il codice utilizzato ma la struttura della tabella html;
perché, una cosa è leggere una tabella di 3 colonne, altro "paio di maniche"
è leggerne una con delle celle unite (colspan)..

Ciao.
--
Sergio MAZZA


Giorgio

unread,
Jul 25, 2007, 5:15:59 AM7/25/07
to

> Non mi serve il codice utilizzato ma la struttura della tabella html;
> perché, una cosa è leggere una tabella di 3 colonne, altro "paio di
> maniche" è leggerne una con delle celle unite (colspan)..

Salve Sergio,

spero ti riferisca a ciò:
---------------------------------------------
<tr class='eventtableheader'><td>Code</td><td>Descrizione</td><td
align=center><nobr>1</nobr></td><td align=center><nobr>X</nobr></td><td
align=center><nobr>2</nobr></td><td align=center><nobr>1X</nobr></td><td
align=center><nobr>12</nobr></td><td align=center><nobr>X2</nobr></td><td
align=center><nobr>Under</nobr></td><td
align=center><nobr>Over</nobr></td><td align=center><nobr>GG</nobr></td><td
align=center><nobr>NG</nobr></td></tr><tr class=whitebox><td
class=whiteboxnormal>394</td>
<td class=whiteboxnormal><nobr>23/7/07 19:00 Brommapojkarna -
Trelleborg</nobr></td>
<td>2.05</td><td>3.20</td><td>3.25</td><td>1.20</td><td>1.20</td><td>1.60</td><td>1.85</td><td>1.80</td><td>1.75</td><td>1.90</td></tr>
<tr class=whiteboxhighlight><td class=whiteboxHighlightNormal>393</td>
<td class=whiteboxHighlightNormal><nobr>23/7/07 19:00 Helsingborg - Aik
Stockholm</nobr></td>
<td>1.85</td><td>3.25</td><td>3.85</td><td>1.15</td><td>1.30</td><td>1.75</td><td>1.75</td><td>1.90</td><td>1.75</td><td>1.90</td></tr>
</table><br><table cellspacing='1' cellpadding='0' border='0'>
<tr class='dkblueboxcentred'><td colspan=2>Calcio - SWE - Superettan</td><td
colspan=3>Risult. 90'</td>
<td colspan=3>Dopp.Chance</td>
<td colspan=2>Under/Over 2.5</td>
<td colspan=2>GG/NG</td>
</tr>
<tr class='eventtableheader'><td>Code</td><td>Descrizione</td><td
align=center><nobr>1</nobr></td><td align=center><nobr>X</nobr></td><td
align=center><nobr>2</nobr></td><td align=center><nobr>1X</nobr></td><td
align=center><nobr>12</nobr></td><td align=center><nobr>X2</nobr></td><td
align=center><nobr>Under</nobr></td><td
align=center><nobr>Over</nobr></td><td align=center><nobr>GG</nobr></td><td
align=center><nobr>NG</nobr></td></tr><tr class=whitebox><td
class=whiteboxnormal>8970</td>
<td class=whiteboxnormal><nobr>23/7/07 19:00 Bunkeflo If - Bk
Häcken</nobr></td>
<td>2.67</td><td>3.23</td><td>2.32</td><td>1.45</td><td>1.25</td><td>1.35</td><td>1.92</td><td>1.68</td><td>1.69</td><td>1.91</td></tr>
<tr class=whiteboxhighlight><td class=whiteboxHighlightNormal>8922</td>
<td class=whiteboxHighlightNormal><nobr>23/7/07 19:00 Enköpings Sk -
Falkenbergs Ff</nobr></td>
<td>1.90</td><td>3.30</td><td>3.50</td><td>1.20</td><td>1.24</td><td>1.69</td><td>1.90</td><td>1.70</td><td>1.70</td><td>1.90</td></tr>
<tr class=whitebox><td class=whiteboxnormal>8923</td>
<td class=whiteboxnormal><nobr>23/7/07 19:00 If Sylvia - Östers
If</nobr></td>
<td>2.64</td><td>3.20</td><td>2.36</td><td>1.45</td><td>1.25</td><td>1.35</td><td>1.91</td><td>1.69</td><td>1.70</td><td>1.90</td></tr>
<tr class=whiteboxhighlight><td class=whiteboxHighlightNormal>8925</td>
<td class=whiteboxHighlightNormal><nobr>23/7/07 20:45 Jönköpings Södra -
Örgryte Is</nobr></td>
<td>2.97</td><td>3.19</td><td>2.15</td><td>1.54</td><td>1.25</td><td>1.28</td><td>1.90</td><td>1.70</td><td>1.70</td><td>1.90</td></tr>
<tr class=whitebox><td class=whiteboxnormal>8924</td>
<td class=whiteboxnormal><nobr>23/7/07 19:00 Ljungskile Sk - Ifk
Norrköping</nobr></td>
<td>3.90</td><td>3.33</td><td>1.79</td><td>1.80</td><td>1.23</td><td>1.16</td><td>1.98</td><td>1.64</td><td>1.65</td><td>1.96</td></tr>
</table><br><table cellspacing='1' cellpadding='0' border='0'>
<tr class='dkblueboxcentred'><td colspan=2>Calcio - USA - Major
League</td><td colspan=3>Risult. 90'</td>
<td colspan=3>Dopp.Chance</td>
<td colspan=2>Under/Over 2.5</td>
<td colspan=2>GG/NG</td>
</tr>
---------------------------

Grazie ancora.
George


Sergio MAZZA

unread,
Jul 25, 2007, 5:48:13 AM7/25/07
to
"Giorgio" <Giorg.ioNo...@libero.it> ha scritto nel messaggio
news:hxEpi.2728$pd1....@tornado.fastwebnet.it...
>
> Salve Sergio,
>
> spero ti riferisca a ciň:
> ---------------------------------------------
---omissis---
> ---------------------------

Sě.
Se ci fai caso ci sono almeno delle colonne unite:


<tr class='dkblueboxcentred'><td colspan=2>Calcio - SWE - Superettan</td><td
colspan=3>Risult. 90'</td>
<td colspan=3>Dopp.Chance</td>
<td colspan=2>Under/Over 2.5</td>
<td colspan=2>GG/NG</td>
</tr>

e sono nell'intestazione; ma visto che devi leggere solo la prima colonna
della prima riga l'istruzione per avere quell'informazione č:
...
otbl.rows(0).cells(0).innertext
...

> Grazie ancora.
> George


Ciao.
--
Sergio MAZZA


Giorgio

unread,
Jul 25, 2007, 7:42:17 AM7/25/07
to

> ...
> otbl.rows(0).cells(0).innertext
> Ciao.
> --
> Sergio MAZZA

In riferimento al codice postato, in che punto devo inserire questa
istruzione ?

Grazie
Giorgio


Sergio MAZZA

unread,
Jul 25, 2007, 7:54:29 AM7/25/07
to
"Giorgio" <Giorg.ioNo...@libero.it> ha scritto nel messaggio
news:rGGpi.3008$pd1....@tornado.fastwebnet.it...

>
> In riferimento al codice postato, in che punto devo inserire questa
> istruzione ?
>
> Grazie
> Giorgio

...


For Each oTblCll In oTblRw.Cells

rst(a) = oTblCll.innerText '<-- scrivo il contenuto delle celle nei
campi
a = a + 1
Next oTblCll

...
rst!intestazione = otbl.rows(0).cells(0).innertext


rst.Update '<-- scrivo il record

...

Se il campo che dovrà contenere l'intestazione l'hai chiamato
"intestazione"...

Ciao.
--
Sergio MAZZA


Giorgio

unread,
Jul 25, 2007, 8:08:17 AM7/25/07
to
> rst!intestazione = otbl.rows(0).cells(0).innertext
> rst.Update '<-- scrivo il record
> ...
>
> Se il campo che dovrà contenere l'intestazione l'hai chiamato
> "intestazione"...
>
> Ciao.
> --
> Sergio MAZZA

Ovviamente, funziona alla grande !!!!
Ultima cosa (dicono tutti così :P): è possibile eliminare i primi 8
caratteri di questa intestazione ?

Ciao
Giorgino

Sergio MAZZA

unread,
Jul 25, 2007, 8:14:14 AM7/25/07
to
"Giorgio" <Giorg.ioNo...@libero.it> ha scritto nel messaggio
news:O2Hpi.3047$pd1...@tornado.fastwebnet.it...

>
> Ovviamente, funziona alla grande !!!!
> Ultima cosa (dicono tutti così :P): è possibile eliminare i primi 8
> caratteri di questa intestazione ?

Utilizza la funzione Mid (vedi help VBA)...

> Ciao
> Giorgino


Ciao.
--
Sergio MAZZA


0 new messages