Rom*_*ron 3 optimization xpath google-sheets google-sheets-formula
我有一个 Google 表格,其中行是产品,列是有关这些产品的信息(材料、颜色、价格等)。
这些信息是使用函数 IMPORTXML 和相应的 xpath 查询来检索的。在以下示例中,D 列是该产品的 URL。这些函数检索第 3 行产品的信息(玻璃、颜色和类型):
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,'Glass')]]/td")
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,'Color')]]/td")
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,'Type')]]/td")
Run Code Online (Sandbox Code Playgroud)
对于每个产品,大约有 10 个列被检索,因此同一个 URL 有 10 个不同的函数 IMPORTXML。
当产品很少时,它可以正常工作,但当产品太多时,只会检索一些信息,而其他单元格保持冻结状态,值为“正在加载...”。
我发现的唯一解决方法是手动复制/粘贴检索到的值(Ctrl+C、Ctrl+Maj+v),然后解锁其他一些单元格并开始导入值。最后,我需要对所有单元格执行此操作,这需要很多时间。
例如:
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,{'Glass', 'Color', 'Type'})]]/td")
Run Code Online (Sandbox Code Playgroud)
可以通过调整 xpath 查询并使用不同的 Google 电子表格公式的组合来解决此问题。
例如:
=TRANSPOSE(IMPORTXML(D2,"
(//table[@class='info-table']/tr[th/text()[contains(.,'Diameter')]]/td)[1] |
(//table[@class='info-table']/tr[th/text()[contains(.,'Material')]]/td)[1] |
(//table[@class='info-table']/tr[th/text()[contains(.,'Glass')]]/td)[1] |
(//table[@class='info-table']/tr[th/text()[contains(.,'W/R')]]/td)[1] |
(//table[@class='info-table']/tr[th/text()[contains(.,'Caliber')]]/td)[1] |
(//table[@class='info-table']/tr[th/text()[contains(.,'Type')]]/td)[1]"))
Run Code Online (Sandbox Code Playgroud)
通过这样做,每个产品只有一个 importXML。