删除XML节点后损坏的Excel文件

时间:2014-07-11 21:35:39

标签: xml vba excel-vba excel-2010 corrupt

背景故事
我正在尝试使用VBA从Excel工作表XML文件中删除多个节点。节点对应于在工作簿中的工作表上完成的筛选,我正在尝试删除筛选。

我删除过滤的原因是由于与过滤相关的一些损坏。我可以在Excel修复后打开文件,但它会以“已修复”模式打开文件,这很难保存。修复对话框显示以下内容:

删除记录:从/xl/worksheets/sheet2.xml部分排序

为什么它说'排序'我不确定。我很肯定腐败与过滤纸张有关。我的想法是删除那些节点,以便Excel不必修复文件......

我尝试过什么
我已设法打开XML文件并删除相应的节点。请参阅以下代码:

Public Sub DeleteXMLNodes()
    Dim oXMLDoc As MSXML2.DOMDocument
    Dim sFileName As String
    Dim xlFolder As String

    xlFolder = "C:\Users\Documents\ReadOnly Testing3\xl\worksheets\"
    sFileName = "Sheet2.xml"
    If Len(xlFolder) = 0 Then
        GetXMLFromFile = ""
    Else
        Set oXMLDoc = New MSXML2.DOMDocument
        oXMLDoc.Load xlFolder & sFileName

        Dim nodeList As IXMLDOMNodeList
        Dim node As MSXML2.IXMLDOMNode
        Dim deleteMe As IXMLDOMNode
        Dim oldChild As IXMLDOMNode
        Dim i As Long

        'Retrieve the node list by using an XPath query.
        'Set nodeList = oXMLDoc.SelectNodes("/worksheet/sheetData/row/c")
        Set nodeList = oXMLDoc.SelectNodes("/worksheet/autoFilter/filterColumn")

        For i = 1 To nodeList.Length
            Set deleteMe = oXMLDoc.SelectSingleNode( _ 
                           "/worksheet/autoFilter/filterColumn[" & i & "]")
            Set oldChild = deleteMe.ParentNode.RemoveChild(deleteMe)
        Next
        oXMLDoc.Save (xlFolder & sFileName)
        Set oXMLDoc = Nothing
    End If
End Sub

问题
问题是,一旦我删除了节点,将文件压缩回来,并尝试将它们作为.xlsm文件打开,我收到一条消息,说明该文件已损坏且Excel无法修复它。

是否还需要删除其他XML文件中的某个节点或数据?什么是Excel查找会将文件标记为已损坏?

在我保存损坏的Excel文件之前,我保存了一个好的文件来比较损坏的文件。从我所看到的,删除过滤器节点后​​它们是相同的......

之前有没有人这样做过,知道我错过了什么?

0 个答案:

没有答案