如何使用 vba 只保留 XML 文件中想要的文本

安迪

我在 excel 中使用 VBA,它查找特定值是否存在于像 XML 文件一样编码的文件中。XML 文件很大(超过 100000 行,只有几百万个字符),为了提高我将 XML 文件加载到数组的速度。当我使用 100 个 XML 文件时,一切都对我有用,但是,如果有超过 200 个 XML 文件,excel 将消耗过多的 RAM,并且代码会因“运行时错误 7 内存不足”而失败。

我想我只需要 XML 代码中的特定值,这些值总是以: 开头并以:="结尾",所以如果我删除其他所有内容并只保留所需的文本,这将节省大量消耗的 RAM。

例如,我的 XML 文件包含:

...
$<yiapcspvgdldm:Condition.ActionTypes>
<yiapcspvgdldm:ColorChange
    BrushStyle="H1"
    ColorChangeType="NormalColorChange"
    Color="#00FFFFFF"
    PropertyName="Foreground" />
<yiapcspvgdldm:Blinking
    PropertyName="Foreground" />
<yiapcspvgdldm:Set
    AttributeName="Visibility"
    AttributeType="System"
    To="{x:Static Visibility.Hidden}" />
</yiapcspvgdldm:Condition.ActionTypes>$
...

在这种情况下,我只需要:

H1
NormalColorChange
#00FFFFFF
Foreground
Foreground
Visibility
System
{x:Static Visibility.Hidden}

正如我提到的,每个文件包含 > 100000 行,我试图遍历字符串的每一行EOF,但这需要很长时间……我尝试了 SPLIT 函数,但这只是拆分文本,并没有删除不需要的文本。我试图在这里找到我的答案,但没有成功。任何帮助都感激不尽。

这是我提取的 SUB:

Dim GrapicFiles(), GrapicText() As String
Dim PrjtFolder as string

Sub LoadXML()
Dim i, GraphCount As Integer
Dim Path, FileName As String
Dim objFSO, objTF As Object
Dim strIn As Variant

PrjtFolder="C:\temp\"

If Worksheets("Work").FilterMode Then Worksheets("Work").ShowAllData
GraphCount = Application.WorksheetFunction.CountA(Worksheets("Work").Range("B:B")) - 1


For i = 1 To GraphCount
    DoEvents

    FileName = Worksheets("Work").Cells(i + 1, 2).Value
    Path = PrjtFolder & FileName & "\Main.xml"

        'Load files to array

        ReDim Preserve GrapicFiles(UBound(GrapicFiles) + 1)
        ReDim Preserve GrapicText(UBound(GrapicText) + 1)

            'Text Reading
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set objTF = objFSO.OpenTextFile(Path, 1)
            strIn = objTF.readall
            objTF.Close
            Set objFSO = Nothing
            Set objTF = Nothing

    '>>>>>>>I will need something here to make my 'strIn' string smaller

        'saving to array
        GrapicFiles(i) = FileName
        GrapicText(i) = strIn
        Set strIn = Nothing

Next i

End Sub
埃诺

这可能会帮助您解析这些行:

Dim GrapicText() As String
Dim sLine As String
Dim i As Long, iPos As Long

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTF = objFSO.OpenTextFile("C:\Users\acs.erno\Documents\Prog\Frm\x.xml", 1)
strIn = objTF.readall
objTF.Close
Set objFSO = Nothing
Set objTF = Nothing

GrapicText = Split(strIn, vbCrLf)    ' split to buffer
For i = LBound(GrapicText) To UBound(GrapicText)
    iPos = InStr(GrapicText(i), "=") 
    If iPos > 0 Then                 ' lines with "=" only
        sLine = Mid$(GrapicText(i), iPos + 2)
        iPos = InStrRev(sLine, """")    ' find terminal "
        If iPos > 1 Then sLine = Left$(sLine, iPos - 1)
        Debug.Print sLine
    End If
Next

还有 1 条评论:将Dim GrapicFiles(), GrapicText() As StringGrapicFiles() 声明为Variant. Dim GrapicFiles() As String, GrapicText() As String,如果你想它String

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何只保留文件中的给定字符?

来自分类Dev

如何在VBA中解析XML文件

来自分类Dev

如何只复制匹配的文件,保留子目录

来自分类Dev

如何在php中只保留数组中的空元素?

来自分类Dev

我如何只保留列中的前n行

来自分类Dev

如何使用 VBA 从 xml 文件的 CDATA 部分提取特定信息?

来自分类Dev

如何使用VBA在Word中设置文本字体,但将字体保留在公式中?

来自分类Dev

如何在c#中只从文件中获取xml?

来自分类Dev

使用VBA在XML文件中动态搜索数据

来自分类Dev

如何在Outlook VBA中使用XML声明加载XML文件?

来自分类Dev

如何配置log4j只保留最近n天的日志文件?

来自分类Dev

使用VBA遍历XML

来自分类Dev

使用VBA遍历XML

来自分类Dev

使用ruamel.yaml格式化时,只保留带有注释的YAML文件吗?

来自分类Dev

如何只保留在javascript中带有字母的记录?

来自分类Dev

R:如何按条件/匹配在字符串中只保留一个值?

来自分类Dev

如何只保留ArrayList中具有最大值的对象?

来自分类Dev

如何使用VBA读取不同的节点xml

来自分类Dev

如何使用Excel VBA访问XML响应

来自分类Dev

如何只复制范围内的Excel VBA中的值?

来自分类Dev

如何只复制范围内的Excel VBA中的值?

来自分类Dev

VBA中的XML解析

来自分类Dev

使用VBA将xml文件转换为xlsx文件

来自分类Dev

如何在VBA中使用元素名称作为文件名保存xml附件

来自分类Dev

如何在Excel VBA中正确使用SelectSingleNode在大型XML文件中选择节点

来自分类Dev

只保留数组中的唯一值

来自分类Dev

WeakReference 只保留 1 代中的对象?

来自分类Dev

VBA:如何通过读取 XML 文件处理空数组

来自分类Dev

如何将xml文件保存在我想要的目录中(android studio)

Related 相关文章

热门标签

归档