【问题标题】:Google Spreadsheets ImportXML into 2 columns谷歌电子表格 ImportXML 分为 2 列
【发布时间】:2015-06-30 12:05:28
【问题描述】:

我有一个如下所示的 xml 文档:

<Time>
<ID>22653948</ID>
<Job>
<ID>J000010</ID>
<Name>NEP0001_Evesham</Name>
</Job>
<Task>
<ID>12379652</ID>
<Name>Assemble</Name>
</Task>
<Staff>
<ID>68684</ID>
<Name>Ruiardh Robinson</Name>
</Staff>
<Date>2012-10-29T00:00:00</Date>
<Minutes>180</Minutes>
<Note/>
<Billable>true</Billable>
</Time>

该文档包含多个&lt;Time&gt; 条目,我正在尝试为每个任务导入所有&lt;Date&gt;&lt;Minutes&gt; 字段,仅在日期包含字符串“2014”的地方。我可以使用以下命令导入 2014 年的所有日期字段:

=QUERY(ImportXML('Time Data'!F2, "//Time/Date"), "SELECT * WHERE Col1 contains '2014-04'")

但是我无法为同一条目获取相应的分钟字段,我知道您可以使用 | 运算符进行多个 xpath 查询,我尝试了以下操作,但它不起作用,因为它只返回第一个日期出于某种原因,第一个条目中的字段。

=QUERY(ImportXML('Time Data'!F2, "//Time/Date | //Time/Minutes"), "SELECT * WHERE Col1 contains '2014-04'")

有谁知道我如何仅在日期包含“2014”的情况下导入两列?

【问题讨论】:

    标签: xml xpath google-apps-script google-sheets


    【解决方案1】:

    你可以使用:

    //Time/*[self::Date or self::Minutes]
    

    无论谷歌读取 XML 的方式如何,这将填充行而不是列,因此如果您在 A1 中进行查询,结果将是

       A                    B                  C     ...
    1 2012-10-29T00:00:00
    2 180
    

    因此,如果您希望它出现在列中,您只需在 B1 中添加第二个 ImportXML 查询,该查询使用 //Time/Minutes

    不过,我只是将整个 XML 导入另一张工作表中,然后对其进行查询。

    顺便说一句,您也可以使用 //Time[starts-with(Date, '2014')] 而不是将 ImportXML 包装在 QUERY 中

    【讨论】:

    • 谢谢,我使用starts-with 位让它工作了,但是现在它导入每个&lt;Time&gt; 标签中的每一行,例如ID,工作,员工等。没那么重要,但我想知道是否有办法只导入日期和分钟条目
    • 我认为唯一的方法是让 2 个导入语句彼此相邻docs.google.com/spreadsheets/d/…
    • 干杯伙伴,谢谢你的例子。这正是我想要做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多