gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:05:00 25 4
gpt4 key购买 nike

背景故事
我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com