Foxtable(狐表)用户栏目专家坐堂 → 求助:多个表组合生成一个XML文件,已实现单个工作表生成实现XML,求助多个工作表怎么实现按照“起诉书编号”这个关联字段来对应生成XML文件呢?


  共有2220人关注过本帖树形打印复制链接

主题:求助:多个表组合生成一个XML文件,已实现单个工作表生成实现XML,求助多个工作表怎么实现按照“起诉书编号”这个关联字段来对应生成XML文件呢?

帅哥哟,离线,有人找我吗?
李孝春
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
求助:多个表组合生成一个XML文件,已实现单个工作表生成实现XML,求助多个工作表怎么实现按照“起诉书编号”这个关联字段来对应生成XML文件呢?  发帖心情 Post By:2016/11/1 9:54:00 [只看该作者]

单个工作表运行代码如下
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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)类似Dim xls As String = "F:\H\问题...  发帖心情 Post By:2016/11/1 14:41:00 [只看该作者]

参照代码如下:结果出错!
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
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/11/1 14:44:00 [只看该作者]

WriteStartElement和WriteEndElement要成对出现,而且不能交叉嵌套,自己找找

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)WriteStartElement和WriteEndElement...  发帖心情 Post By:2016/11/1 17:05:00 [只看该作者]

Next
        '关闭次级元素DatabaseSetting
        writer.WriteEndElement()
    '关闭根元素
    writer.WriteFullEndElement()
    '将XML写入文件并关闭writer

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

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



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


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




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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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这类代码多余的,去掉

 回到顶部