Есть файл товаров. В одном из столбцов "body : Описание" содержится HTML таблица : <table width="100%"border="0"cellspacing="0"cellpadding="4"class="border"><tr class="t0"><td width="40%">Мощность (охлаждение)</td><td><b>2,6 кВт</b></td></tr><tr У разных товаров разные параметры: Мощность, Обогрев, охлаждение и тп. Нужно: Достать из этого столбца (таблицы) параметры и вывести их отдельными столбцами?
Есть файл товаров. В одном из столбцов "body : Описание" содержится HTML таблица : <table width="100%"border="0"cellspacing="0"cellpadding="4"class="border"><tr class="t0"><td width="40%">Мощность (охлаждение)</td><td><b>2,6 кВт</b></td></tr><tr У разных товаров разные параметры: Мощность, Обогрев, охлаждение и тп. Нужно: Достать из этого столбца (таблицы) параметры и вывести их отдельными столбцами? IvanPavlov
Сделал Параметр-Значение пользовательская функция [vba]
Код
Function IvanPavlov(t, x, q) As String With CreateObject("VBScript.RegExp") .Pattern = "(?:<td width=""40%"">)([^<]+)|(?:<b>)([^<]+)" .Global = True If x - 1 < .Execute(t).Count Then IvanPavlov = .Execute(t)(x - 1).submatches(q) End With End Function
[/vba] формула в первую ячейку (потом протягиваем)
Код
=IvanPavlov($F2;СТОЛБЕЦ(A1);--ЕЧЁТН(СТОЛБЕЦ(A1)))
upd. переделал паттерн (упростил)
Сделал Параметр-Значение пользовательская функция [vba]
Код
Function IvanPavlov(t, x, q) As String With CreateObject("VBScript.RegExp") .Pattern = "(?:<td width=""40%"">)([^<]+)|(?:<b>)([^<]+)" .Global = True If x - 1 < .Execute(t).Count Then IvanPavlov = .Execute(t)(x - 1).submatches(q) End With End Function
[/vba] формула в первую ячейку (потом протягиваем)
sboy, Большое спасибо! Получилось, правда не совсем то, что нужно, но очень рядом Как сделать что-бы создавались отдельные столбцы, например: столбец "Мощность (охлаждение)" а в нем показатели? Дело в том, что это таблица для импорта товаров на сайт и нужен фасетный поиск по товарам (по параметрам), для этого нужны отдельные столбцы с параметрами товаров.
sboy, Большое спасибо! Получилось, правда не совсем то, что нужно, но очень рядом Как сделать что-бы создавались отдельные столбцы, например: столбец "Мощность (охлаждение)" а в нем показатели? Дело в том, что это таблица для импорта товаров на сайт и нужен фасетный поиск по товарам (по параметрам), для этого нужны отдельные столбцы с параметрами товаров.IvanPavlov
Sub param() arr_ = Range(Cells(2, 6), Cells(2, 6).End(xlDown)).Value Set oDict = CreateObject("Scripting.Dictionary") With CreateObject("VBScript.RegExp") .Pattern = "(?:<td width=""40%"">)([^<]+)" .Global = True For x = 1 To UBound(arr_) For y = 0 To .Execute(arr_(x, 1)).Count - 1 If Not oDict.Exists(.Execute(arr_(x, 1))(y).submatches(0)) Then
oDict.Add Key:=.Execute(arr_(x, 1))(y).submatches(0), Item:="" End If Next y Next x End With arrkey = oDict.keys Cells(1, 9).Resize(1, UBound(arrkey)+1) = arrkey End Sub
[/vba] функция теперь выглядит так [vba]
Код
Function IvanPavlov(t, p) As String With CreateObject("VBScript.RegExp") .Pattern = "(?:" & Replace(Replace(p, "(", "\("), ")", "\)") & "<\/td><td><b>)([^<]+)" .Global = True If .test(t) Then IvanPavlov = .Execute(t)(0).submatches(0) End With End Function
[/vba]
Макрос формирует названия столбцов [vba]
Код
Sub param() arr_ = Range(Cells(2, 6), Cells(2, 6).End(xlDown)).Value Set oDict = CreateObject("Scripting.Dictionary") With CreateObject("VBScript.RegExp") .Pattern = "(?:<td width=""40%"">)([^<]+)" .Global = True For x = 1 To UBound(arr_) For y = 0 To .Execute(arr_(x, 1)).Count - 1 If Not oDict.Exists(.Execute(arr_(x, 1))(y).submatches(0)) Then
oDict.Add Key:=.Execute(arr_(x, 1))(y).submatches(0), Item:="" End If Next y Next x End With arrkey = oDict.keys Cells(1, 9).Resize(1, UBound(arrkey)+1) = arrkey End Sub
[/vba] функция теперь выглядит так [vba]
Код
Function IvanPavlov(t, p) As String With CreateObject("VBScript.RegExp") .Pattern = "(?:" & Replace(Replace(p, "(", "\("), ")", "\)") & "<\/td><td><b>)([^<]+)" .Global = True If .test(t) Then IvanPavlov = .Execute(t)(0).submatches(0) End With End Function