gpt4 book ai didi

xml - SharePoint 列表、GetListItems、XML 和 VBA - 我只想交叉引用!

转载 作者:数据小太阳 更新时间:2023-10-29 02:28:28 29 4
gpt4 key购买 nike

我有一个 SharePoint 列表,其中包括我关心的两列;在 Excel-ese 中,我想匹配第 1 列中的值 X,并返回第 2 列中的相应值。我可以在 http://guruj.net/node/63 处使用代码的变体检索信息(我认为),所以我认为我的问题集中在没有下载 DLL 的情况下在 VBA 中导航 XML(我确实有一堆 MSXML?.DLL,2、2.6、3、4、5、6)。

我找到的最接近的 MSDN 文章引用了 .NET(我被困在 Office 2003 附带的 VBA/VB6?)或可下载的 DLL。

Nat 下面的回复概述了我发现或需要的大部分内容但是我发现它的语言错误,我的部分问题是查找搜索词。我把一些翻译混在一起,例如,XMLDocument 似乎是 DOMDocument,但 XML 部分是 IXMLDOMNode 或类似的。

我目前遇到的主要问题是我在执行查询的 SOAP 调用中遇到类型不匹配,或者当我尝试重铸播放器时对象不支持该方法(listQuery、listViewFields、listQueryOptions ).我将各个部分保留为变体,然后将它们转换为返回的类型(因为我没有“引用”特定于 SP 的库,所以我这样做有点盲目)并得到不匹配。

从屏幕上抓取文本似乎要容易得多。

最佳答案

哇,你在兔子洞里太远了......

好的,您正在查看的代码使您可以查看 SharePoint 列表,这可能不是最好的起点,但所有这些都是在 VBA 中完成的事实让它变得非常困难。我有 .NET C# 代码来查询列表并检索具有特定值的项目。我无法执行的 VBA 转换。

public static string GetPageId(string listName, string webPath, string pageTitle)
{
string pageId = "";
IntranetLists.Lists lists = new IntranetLists.Lists();
lists.UseDefaultCredentials = true;
lists.Url = webPath + "/_vti_bin/lists.asmx";
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Document><Query><Where><Contains><FieldRef Name=\"Title\" /><Value Type=\"Text\">" + pageTitle + "</Value></Contains></Where></Query><ViewFields /><QueryOptions /></Document>");
XmlNode listQuery = doc.SelectSingleNode("//Query");
XmlNode listViewFields = doc.SelectSingleNode("//ViewFields");
XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions");

Guid g = GetWebID(webPath);

XmlNode items = lists.GetListItems(listName, string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, g.ToString());
foreach (XmlNode listItem in SPCollection.XpathQuery(items, "//sp:listitems/rs:data/z:row"))
{
XmlAttribute id = listItem.Attributes["ows_Id"];
if (id != null)
{
pageId = id.Value;
}

}
return pageId;
}

IntranetLists 是对 lists.asmx 文件的 .net Web 引用。

您必须研究如何在 VBA 中使用 lists.asmx 网络服务,然后,您必须使用代表您要查找的列值的查询来调用 GetListItems。

<Where><Contains><FieldRef Name="Title" /><Value Type="Text">MyValue</Value></Contains></Where>

该查询的语法是 CAML

然后您将不得不解析返回的 xml 以找到具有所需值的项目和项目字段。任何 xpath 查询都必须添加正确的命名空间,例如

  public static XmlNodeList XpathQuery(XmlNode xmlToQuery, string xPathQuery)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlToQuery.OuterXml);
XmlNamespaceManager mg = new XmlNamespaceManager(doc.NameTable);
mg.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/");
mg.AddNamespace("z", "#RowsetSchema");
mg.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
mg.AddNamespace("y", "http://schemas.microsoft.com/sharepoint/soap/ois");
mg.AddNamespace("w", "http://schemas.microsoft.com/WebPart/v2");
mg.AddNamespace("d", "http://schemas.microsoft.com/sharepoint/soap/directory");
return doc.SelectNodes(xPathQuery, mg);
}

但是我不确定您是否可以访问在您的 VBA 设置中解析 xml 的内容,因此您可能需要下载一些额外的 VBA 工具来执行此操作 - 甚至可能会被阻止。

希望对您有所帮助。

关于xml - SharePoint 列表、GetListItems、XML 和 VBA - 我只想交叉引用!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445274/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com