我使用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")
每个数据字段
答案 0 :(得分:1)
我一直在努力解决同样的问题。我到目前为止找到的唯一方法是在标题行上方插入另一行,然后在此之后传递所需的范围。
过滤时,我必须在开头添加额外的空格。 所以
RS.Filter = "[field_header] = " & strSome_text
变为
RS.Filter = "[ field_header] = " & strSome_text
因为看起来Excel正在附加它。我正在尝试Trim
:
xlXML.LoadXML Trim(rngInputRange.value(xlRangeValueMSPersistXML))
没有快乐。我的几个标题都有空格,所以使用Replace
会让事情变得更加丑陋。
添加额外的行并将空格附加到字段名称的开头意味着我可以使用空格过滤字段名称,因为我通常可以使用第1行的标题行,所以虽然有点脏,但这是一个很好的我现在有足够的解决方法。