'需要引入的 命名空间
Imports System.Xml
Imports System.IO
#Region "XML 读取 写入 生成"
Private Sub createXML(ByVal xmlFileName As String)
Try
Dim writer As New Xml.XmlTextWriter(xmlFileName, System.Text.Encoding.GetEncoding("utf-8"))
'使用自动缩进便于阅读
writer.Formatting = Xml.Formatting.Indented
writer.WriteRaw("<!--l version=""1.0"" encoding=""utf-8""-->")
writer.WriteRaw("<!-- Xing -->")
'书写根元素()
writer.WriteStartElement("xx")
'关闭根元素
writer.WriteFullEndElement()
'将XML写入文件并关闭writer
writer.Close()
Catch ex As System.Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try
End Sub
Private Sub FpSpread_Column_Size_load(ByVal FpSpread As FarPoint.Win.Spread.FpSpread)
Dim xmlDoc As New XmlDocument
Dim XmlFileName As String = "C:\XX\INI\FpSpread_Config.xml" '修改为实际XML路径
Dim intCol As Integer
Try
If File.Exists(XmlFileName) Then
xmlDoc.Load(XmlFileName)
Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("xx").ChildNodes '获取xx节点的所有子节点
Dim xn As XmlNode
For Each xn In nodeList
Dim xe As XmlElement = CType(xn, XmlElement)
If xe.GetAttribute("form") = Me.Name And xe.GetAttribute("Name") = FpSpread.Name Then
Dim nls As XmlNodeList = xe.ChildNodes '继续获取xe子节点的所有子节点
Dim xn1 As XmlNode
For Each xn1 In nls '遍历
Dim xe2 As XmlElement = CType(xn1, XmlElement) '转换类型
intCol = xe2.Name.Substring(1, xe2.Name.Length - 1)
FpSpread.ActiveSheet.Columns(Val(intCol)).Width = Integer.Parse(xe2.InnerText)
Next xn1
End If
Next
End If
Catch ex As System.Exception
File.Delete(XmlFileName)
End Try
End Sub
Private Sub FpSpread_Column_Size_save(ByVal FpSpread As FarPoint.Win.Spread.FpSpread)
Dim xmlDoc As New XmlDocument
Dim XmlFileName As String = "C:\xx\INI\FpSpread_Config.xml" '修改为实际XML路径
Dim intRecord As Integer
Try
If File.Exists(XmlFileName) = False Then
createXML(XmlFileName)
End If
xmlDoc.Load(XmlFileName)
Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("xx").ChildNodes '获取xx节点的所有子节点
Dim xn As XmlNode
For Each xn In nodeList '遍历所有子节点
Dim xe As XmlElement = CType(xn, XmlElement) '将子节点类型转换为XmlElement类型
If xe.GetAttribute("form") = Me.Name And xe.GetAttribute("Name") = FpSpread.Name Then '如果form属性值为“当前窗口”Name为 当前spread 那么就 清空下面的数据
intRecord += 1
xe.RemoveAll() '*清空数据
If intRecord < 2 Then
xe.SetAttribute("form", Me.Name)
xe.SetAttribute("Name", FpSpread.Name)
Dim child_node As XmlElement
For i As Integer = 0 To FpSpread.ActiveSheet.Columns.Count - 1
child_node = xmlDoc.CreateElement("C" & i)
child_node.InnerText = FpSpread.ActiveSheet.Columns(i).Width
xe.AppendChild(child_node)
Next
End If
End If
Next xn
If intRecord < 1 Then
Dim root As XmlNode = xmlDoc.SelectSingleNode("xx")
Dim xe1 As XmlElement = xmlDoc.CreateElement("spread")
xe1.SetAttribute("form", Me.Name)
xe1.SetAttribute("Name", FpSpread.Name)
Dim child_node As XmlElement
For i As Integer = 0 To FpSpread.ActiveSheet.Columns.Count - 1
child_node = xmlDoc.CreateElement("C" & i)
child_node.InnerText = FpSpread.ActiveSheet.Columns(i).Width
xe1.AppendChild(child_node)
Next
root.AppendChild(xe1) '添加到节点中
End If
xmlDoc.Save(XmlFileName) '保存。
Catch ex As System.Exception
End Try
End Sub
#End Region
#Region "Form Load"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'spread load
FpSpread_Column_Size_load(Me.spListMain)
End Sub
#End Region
#Region "form 关闭"
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
FpSpread_Column_Size_save(Me.spListMain)
End Sub
#End Region
生成的XML文件内如如下
<?xml version="1.0" encoding="utf-8"?>
<!-- Xing -->
<xx>
<spread form="FORM1" Name="spListMain">
<C0>60</C0>
<C1>90</C1>
<C2>106</C2>
<C3>60</C3>
<C4>80</C4>
<C5>60</C5>
<C6>178</C6>
<C7>60</C7>
<C8>119</C8>
<C9>82</C9>
<C10>145</C10>
<C11>88</C11>
<C12>123</C12>
<C13>60</C13>
</spread>
<spread form="FORM1" Name="spListList">
<C0>17</C0>
<C1>65</C1>
<C2>65</C2>
<C3>31</C3>
<C4>60</C4>
<C5>65</C5>
<C6>118</C6>
<C7>69</C7>
<C8>62</C8>
<C9>71</C9>
<C10>34</C10>
<C11>52</C11>
<C12>58</C12>
<C13>58</C13>
<C14>59</C14>
<C15>106</C15>
<C16>34</C16>
<C17>34</C17>
</spread>
<spread form="FORM1" Name="spList1">
<C0>60</C0>
<C1>60</C1>
<C2>60</C2>
<C3>32</C3>
<C4>60</C4>
<C5>71</C5>
<C6>60</C6>
<C7>60</C7>
<C8>60</C8>
<C9>60</C9>
<C10>60</C10>
<C11>72</C11>
<C12>68</C12>
<C13>70</C13>
<C14>60</C14>
<C15>60</C15>
<C16>60</C16>
<C17>60</C17>
<C18>60</C18>
<C19>60</C19>
<C20>60</C20>
<C21>60</C21>
<C22>65</C22>
</spread>
</xx>
知道你的英文名字了,嘻嘻