【问题标题】:VBA XML file load error when filename has URL encoding文件名具有 URL 编码时的 VBA XML 文件加载错误
【发布时间】:2016-01-20 02:43:58
【问题描述】:

我正在使用 VBA 并使用 Msxml2.DOMDocument.6.0 来读取和解析 XML 文件。它主要工作,除了一些文件名在文件名中有 URL 样式编码。例如,文件名如下:

HelloWorld%2Ecom.xml

当我尝试加载此文件时,我的代码找不到该文件。这是我的代码的简化版本:

Dim filename as String
filename = "HelloWorld%2Ecom.xml" ' This variable is actually populated dynamically
Dim objXML As Variant
Set objXML = CreateObject("Msxml2.DOMDocument.6.0")
objXML.async = True
objXML.Load filename

我在加载操作过程中得到的具体错误是:

加载 XML 文件时出错:系统找不到指定的对象。

如果我手动从文件名中删除 % 符号,则文件加载正常。但是,我确实需要保留原始文件名。

任何建议将不胜感激。

迈克

【问题讨论】:

  • 您绝对可以在读/写文件名时使用%。确保在 Load 语句中使用完整的路径名。
  • 但是,它绝对不起作用。还尝试用另一个 % 转义 % ,但仍然找不到文件:HelloWorld%%2Ecom.xml 给出相同的错误...
  • 如何在代码中使用 Replace 函数(这样您就不需要更改实际文件名)将 % 替换为空格: strFileName = Replace(filename, "%", " ")
  • @MikePaisner,我通过在现有的 xml 文件中添加一个百分比并在没有错误的情况下加载来确定。 Windows 文件路径不允许以下 reserved characters: : " / \ | ? *。再次检查 完整 路径。CPU 目录(不是 URL)中是否存在这样的文件?
  • 我的代码适用于文件夹中的所有文件,除了带有 % 登录文件名的文件,所以路径很好。当我从文件名中手动删除 % 时,它工作正常。我尝试使用 filesystemobject 使用 move 命令重命名文件,但我得到了同样的错误。我无法以编程方式重命名名称中带有 % 符号的文件,因为它找不到该文件。

标签: xml vba


【解决方案1】:

终于明白了。加载前需要对文件名进行urlencode。

而不是上面的这一行:

objXML.Load filename

我把它改成如下:

dim encodedName as String
encodedName = WorksheetFunction.EncodeURL(filename)
objXML.Load encodedName

谢谢, 迈克

【讨论】:

    【解决方案2】:

    另外,使用%25 转义百分号:

    filename = "HelloWorld%252Ecom.xml"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 2020-07-22
      • 1970-01-01
      • 2019-08-16
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多