背景故事
我正在尝试使用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文件之前,我保存了一个好的文件来比较损坏的文件。从我所看到的,删除过滤器节点后它们是相同的......
之前有没有人这样做过,知道我错过了什么?