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

标签 xml vba excel 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 文件之前,我保存了一个好文件来比较损坏的文件。从我可以看到删除过滤器节点后​​它们是相同的......

有没有人这样做过并且知道我错过了什么?

最佳答案

您应该确保删除父部分 - 实际上它已被清空。
看看这个sample code

关于xml - 删除 XML 节点后损坏的 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24706941/

相关文章:

Android:如何将 <string> 元素注入(inject)到 XML 中的另一个 <string> 元素中?

vba - 以列宽和行高显示Excel形状的尺寸vba

arrays - 如何编写 VBA 用户定义函数以使用 ctrl+shift+enter 从 IF 获取数组参数?

excel - 更改 Excel for Mac 的 VBE 的默认字体大小

xml - *.xml 文件的 Subversion 属性应该是什么?

javascript - 欢笑连接: javascript inser xml in mysql

xml - 十六进制 0X19 是无效字符

vba - VBA代码片段出了什么问题?

java - 如何使用 sprint-test-mvc 测试返回 .xls 文件的 Controller 方法

javascript - HTML 表格到 Excel - 格式和扩展名不匹配