以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助:多个表组合生成一个XML文件,已实现单个工作表生成实现XML,求助多个工作表怎么实现按照“起诉书编号”这个关联字段来对应生成XML文件呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=92338)

--  作者:李孝春
--  发布时间:2016/11/1 9:54:00
--  求助:多个表组合生成一个XML文件,已实现单个工作表生成实现XML,求助多个工作表怎么实现按照“起诉书编号”这个关联字段来对应生成XML文件呢?
单个工作表运行代码如下
Dim xls As String = "D:/收案信息.xls"
Dim book As new XLS.Book(xls)
Dim sheet As XLS.Sheet= book.Sheets(0)
Dim xml As String = "D:/收案信息.xml"
Try
    Dim writer As New Xml.XmlTextWriter(xml, System.Text.Encoding.GetEncoding("utf-8"))
    writer.Formatting = System.Xml.Formatting.Indented
    \'书写根元素()
    writer.WriteStartElement("case")
    For i As Integer = 1 To sheet.Rows.count -1
        \'添加次级元素
        writer.WriteStartElement("caseRegistration")
        For j As Integer = 0 To sheet.Cols.count -1
            \'添加子元素()
            writer.WriteElementString(sheet(0,j).value,sheet(i,j).value)
        Next
        \'关闭次级元素DatabaseSetting
        writer.WriteEndElement()
    Next
    \'关闭根元素
    writer.WriteFullEndElement()
    \'将XML写入文件并关闭writer
    writer.Close()
Catch ex As Exception
    MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try

以上代码运行生成的XML文件如下:
<case>
  <caseRegistration>
    <suitDocNumber>1</suitDocNumber>
    <number1>221</number1>
    <name1>22</name1>
    <submittedDate>2016/10/26</submittedDate>
    <number>222</number>
    <name>22</name>
    <suggestedProcedure>普通程序</suggestedProcedure>
    <penalty>死刑</penalty>
    <minDuration>2</minDuration>
    <maxDuration>2</maxDuration>
    <involvedAmount>2</involvedAmount>
    <isTeen>1</isTeen>
    <description>222</description>
    <path>2222</path>
  </caseRegistration>
</case>
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工作簿.xls


图片点击可在新窗口打开查看此主题相关图片如下:222.png
图片点击可在新窗口打开查看

求助多个工作表,或者是一个工作簿下多个工作表怎么实现按照“起诉书编号”这个关联字段来对应生成XML文件呢?
一个起诉书编号生成一个XML文件。
[此贴子已经被作者于2016/11/1 9:54:27编辑过]

--  作者:有点蓝
--  发布时间:2016/11/1 10:48:00
--  
类似


Dim xls As String = "F:\\H\\问题测试/工作簿.xls"
Dim book As new XLS.Book(xls)
Dim sheet As XLS.Sheet= book.Sheets(0)
Dim xml As String = "F:\\H\\问题测试/工作簿.xml"
Try
    Dim writer As New Xml.XmlTextWriter(xml, System.Text.Encoding.GetEncoding("utf-8"))
    writer.Formatting = System.Xml.Formatting.Indented
    \'书写根元素()
    writer.WriteStartElement("case")
    For i As Integer = 1 To sheet.Rows.count -1
        \'添加次级元素
        writer.WriteStartElement("caseRegistration")
        For j As Integer = 0 To sheet.Cols.count -1
            \'添加子元素()
            writer.WriteElementString(sheet(0,j).value,sheet(i,j).value)
        Next
        Dim sheet2 As  XLS.Sheet= book.Sheets(1)
        For i2 As Integer = 1 To sheet2.Rows.count -1
            If sheet2(i2,0).value = sheet(i,0).value
                \'添加次级元素
                writer.WriteStartElement("提交材料")
                For j2 As Integer = 0 To sheet2.Cols.count -1
                    
                    \'添加子元素()
                    writer.WriteElementString(sheet2(0,j2).value,sheet2(i2,j2).value)
                Next
                \'关闭次级元素DatabaseSetting
                writer.WriteEndElement()
            End If
        Next
        \'关闭次级元素DatabaseSetting
        writer.WriteEndElement()
    Next
    \'关闭根元素
    writer.WriteFullEndElement()
    \'将XML写入文件并关闭writer
    writer.Close()
Catch ex As Exception
    MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try

--  作者:李孝春
--  发布时间:2016/11/1 14:41:00
--  回复:(有点蓝)类似Dim xls As String = "F:\H\问题...
参照代码如下:结果出错!
Dim xls As String = "d:/工作簿.xls"
Dim book As new XLS.Book(xls)
Dim sheet As XLS.Sheet= book.Sheets(0)
Dim xml As String = "d:/工作簿.xml"
Try
    Dim writer As New Xml.XmlTextWriter(xml, System.Text.Encoding.GetEncoding("utf-8"))
    writer.Formatting = System.Xml.Formatting.Indented
    \'书写根元素()
    writer.WriteStartElement("case")
        Dim sheet2 As  XLS.Sheet= book.Sheets(1) \'定义打开当前工作簿中的第二个工作表
        For i2 As Integer = 1 To sheet2.Rows.count -1
            If sheet2(i2,0).value = sheet(i2,0).value
                \'添加次级元素
                writer.WriteStartElement("suitDocNumber")
                For j2 As Integer = 0 To sheet2.Cols.count -1         
                    \'添加子元素()
                    writer.WriteElementString(sheet2(0,j2).value,sheet2(i2,j2).value)
                Next
                \'关闭次级元素DatabaseSetting
                writer.WriteEndElement()
            End If
        Next
Dim sheet As  XLS.Sheet= book.Sheets(2) \'定义打开当前工作簿中的第三个工作表
        For i As Integer = 1 To sheet.Rows.count -1
            If sheet(i,0).value = sheet(i,0).value
                \'添加次级元素
                writer.WriteStartElement("suitDocNumber")
                For j As Integer = 0 To sheet.Cols.count -1         
                    \'添加子元素()
                    writer.WriteElementString(sheet(0,j).value,sheet2(i,j).value)
                Next
                \'关闭次级元素DatabaseSetting
                writer.WriteEndElement()
            End If
        Next
        \'关闭次级元素DatabaseSetting
        writer.WriteEndElement()
    \'关闭根元素
    writer.WriteFullEndElement()
    \'将XML写入文件并关闭writer
    writer.Close()
Catch ex As Exception
    MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try



图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2016/11/1 14:44:00
--  
WriteStartElement和WriteEndElement要成对出现,而且不能交叉嵌套,自己找找
--  作者:李孝春
--  发布时间:2016/11/1 17:05:00
--  回复:(有点蓝)WriteStartElement和WriteEndElement...
Next
        \'关闭次级元素DatabaseSetting
        writer.WriteEndElement()
    \'关闭根元素
    writer.WriteFullEndElement()
    \'将XML写入文件并关闭writer

经查 红色部分重复了 删掉后解决了

采用下面代码初步实现多个表生成一个XML文件:
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:代码.txt



经过比对后,初步实现多个工作表生成一个XML文件,
有没有办法实现,用节点名称中的内容来取代我手动输入的节点呢?
注意:同一个起诉书编号下,会对应多个这样的节点名称,要求都能够显示出来。


此主题相关图片如下:11111.png
按此在新窗口浏览图片
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:工作簿.xls




[此贴子已经被作者于2016/11/1 17:08:18编辑过]

--  作者:有点蓝
--  发布时间:2016/11/1 17:59:00
--  
试试

Dim sheet130 As  XLS.Sheet= book.Sheets(0) \'定义打开当前工作簿中的第1个工作表
For i As Integer = 1 To sheet130.Rows.count -1
    If sheet130(0,2).value = "节点名称" And sheet130(i,2).value > ""
        writer.WriteStartElement(sheet130(i,2).value)
    Else
        \'添加次级元素
        writer.WriteStartElement("suitDocNumber")
    End If
    For j As Integer = 0 To sheet130.Cols.count -1
        \'添加子元素()
        writer.WriteElementString(sheet130(0,j).value,sheet130(i,j).value)
    Next
    \'关闭次级元素DatabaseSetting
    writer.WriteEndElement()
Next

另外If sheet1(i,0).value = sheet1(i,0).value这类代码多余的,去掉