Excel-Range XML使用两行标题

时间:2017-01-04 16:18:18

标签: xml vba excel-vba dom excel

我使用this函数从Range - 对象获取记录集,而不设置ADO连接。

Function GetRecordset(rng As Range) As Object    

    Dim xlXML As Object
    Dim rst As Object

    Set rst = CreateObject("ADODB.Recordset")
    Set xlXML = CreateObject("MSXML2.DOMDocument")

    xlXML.LoadXML rng.Value(xlRangeValueMSPersistXML)

    rst.Open xlXML

    Set GetRecordset = rst

End Function

我通常使用一个标题行。如果数据以Row(1)开始,我会得到预期的结果。

但是,如果数据上方有1 Rows,则excel假设我有两个标题行,并将它们与空白连接。

因此,我的记录集使用![Underneath's your header, mate MyField]之类的字段名而不是![MyField]

从技术上讲,问题是rng.Value(xlRangeValueMSPersistXML)将连接的两行作为标题返回,而我无法将其设置为一行。

有兴趣听听您的想法!

编辑:一种解决方法可能是用

替换前导空格
xlXML.LoadXML Replace(rng.Value(xlRangeValueMSPersistXML), "rs:name="" ", "rs:name=""")

或迭代

Replace XML, "rs:name=""Cell1 Cell", "rs:name=""Cell2")
每个数据字段

1 个答案:

答案 0 :(得分:1)

我一直在努力解决同样的问题。我到目前为止找到的唯一方法是在标题行上方插入另一行,然后在此之后传递所需的范围。

过滤时,我必须在开头添加额外的空格。 所以

RS.Filter = "[field_header] = " & strSome_text

变为

RS.Filter = "[ field_header] = " & strSome_text

因为看起来Excel正在附加它。我正在尝试Trim

xlXML.LoadXML Trim(rngInputRange.value(xlRangeValueMSPersistXML))
没有快乐。我的几个标题都有空格,所以使用Replace会让事情变得更加丑陋。

添加额外的行并将空格附加到字段名称的开头意味着我可以使用空格过滤字段名称,因为我通常可以使用第1行的标题行,所以虽然有点脏,但这是一个很好的我现在有足够的解决方法。