以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]字符  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72881)

--  作者:江南小城
--  发布时间:2015/8/8 9:33:00
--  [求助]字符

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

老师,想通过修改下面代码直接拆分数据。
Dim flst As WinForm.ListBox = e.Form.Controls("文件列表")
Dim jdt As WinForm.ProgressBar = e.Form.Controls("进度条")
jdt.Maximum = flst.Items.Count * 100
jdt.Minimum = 0
For fid As Integer = 0 To flst.Items.Count -1
    \'\'-----导出文件-----\'
    Dim fn As String = flst.Items(fid)
    Dim bookname As String = fn.Remove(fn.IndexOf("["))
    Dim sheetname As String = fn.SubString(fn.IndexOf("[")+1,fn.LastIndexOf("]")-fn.IndexOf("[")-1)
    Dim Book As New XLS.Book(bookname)
    Dim sheet As XLS.Sheet = book.sheets(sheetname)
    
    \'-----导入文件
    Dim tblname As WinForm.ComboBox = e.Form.Controls("cbo目标表")
    Dim dt As DataTable = DataTables(tblname.Text)
    \'-------导出配置定义-----------------\'
    Dim bth As WinForm.CheckBox = e.Form.Controls("标题")
    Dim qsh As Integer = cint(e.Form.Controls("有效起始行").text)
    \'----无标题行时,起始行须-1-----
    If bth.Checked = False Then
        qsh = qsh -1
    End If
    
    Dim dcb As WinForm.ListBox = e.Form.Controls("表字段0")
    Dim drb As WinForm.ListBox = e.Form.Controls("表字段")
    \'-----导出表字段列表--------\'
    Dim dc As new List(of String)
    dc.AddRange(dcb.ComboList.Split("|"))
    \'-----导入表字段列表-----\'
    Dim dr As new List(of String)
    dr.AddRange(drb.ComboList.Split("|"))
    
    
    \'------获取导出表数据-----
    For r As Integer = qsh To sheet.rows.Count -1
        
        \'-----进度条----
        jdt.Value = fid*100 + cint(r*100/sheet.Rows.Count)
        \'MessageBox.Show(jdt.value)
        
        \'-----取出一行导出行各列数据-----
        Dim data(dr.Count) As String
        For i As Integer = 0 To dc.Count - 1
            \'-----判定标记列-----\'
            \'MessageBox.Show("dc(i)->" & dc(i))
            If dc(i).Contains("标-->") = True Then
                data(i) = dc(i).SubString(dc(i).IndexOf(">")+1)
            Else
                Dim zdh As Integer
                zdh=cint(dc(i).Remove(dc(i).IndexOf("列")).Trim("第"," "))
                data(i) = sheet(r,zdh-1).value
            End If
        Next
        
        \'-----判断筛选列表是否有效
        \'--------筛选列列表-------------\'
        Dim sxlst As WinForm.ListBox = e.Form.Controls("筛选列表")
        If sxlst.Items.Count > 0 Then
            \'-----判断是否符合导出条件-----
            Dim bds As String = ""         \'-----筛选表达式
            \'--------遍历条件-----
            For Each S As String In sxlst.Items
                \'-----获取列间逻辑符-----
                Dim ljf As String
                ljf= s.SubString(0,s.IndexOf("."))
                ljf = iif(ljf="并且"," AND ",IIF(ljf="或者"," OR ",iif(ljf="排除","Not","")))
                
                \'-----\'获取筛选列的在导出表中的值
                Dim sxl,sxlz,ysf,ysz As String   \'筛选列\\筛选列值\\运算符\\运算值
                Dim sxid As Integer       \'筛选列在导出列表的列位置
                
                sxl = s.Substring( s.IndexOf(".")+1,s.Indexof("[") - s.indexof(".")-1 )
                ysf = s.SubString( s.IndexOf("[")+1,s.IndexOf("]") - s.IndexOf("[") -1 )
                ysz = s.SubString( s.IndexOf("(")+1,s.LastIndexOf(")") - s.IndexOf("(") -1 )
                sxid = Functions.Execute("IndexStr",drb.ComboList,"|",sxl)
                sxlz =data(sxid)    \'----对应的导出数据
                \'-----\'将运算符转为表达式可用的符号
                ysf = iif(ysf="等于", "=" , iif(ysf="不等于", " <> " ,iif(ysf="大于", " > " ,iif(ysf="大于等于", " >= " ,iif(ysf="小于", " < " ,iif(ysf="小于等于", " <= " ,iif(ysf="包含"," like "," not like ")))))))
                \'MessageBox.Show("列逻辑符=\'" & ljf & "\' sxid="\'   & sxid & "\'   sxl=\'" & sxl & "\'   ysf=\'" & ysf & "\'   ysz=\'" & ysz & "\'")
                
                \'-----筛选表达式------   data(sxid)-->是取出导出对应列的值
                \'-----导入值和运算值的数值类型判断
                Dim exp As String
                If IsNumeric(sxlz) = True Then
                    exp = cexp(" {0} {1} {2}",data(sxid),ysf,ysz)
                ElseIf Isdate(sxlz) =True Then
                    exp = cexp(" #{0}# {1} #{2}#",data(sxid),ysf,ysz)
                Else
                    If ysf.Contains("like") Then
                        exp = data(sxid).Contains(ysz)
                    Else
                        exp = """" & data(sxid) & """" & ysf & """" & ysz & """"
                    End If
                    
                End If
                bds = bds & ljf &  exp
                \'MessageBox.Show(bds)
            Next
            
            \'------根据计算表达式计算结果判定导出数据是否符合-------\'
            If eval(bds) = False Then
                Continue For
            End If
        End If
        
        \'-----根据导入模式导入数据-----
        \'------添加模式-----
        Dim hl As WinForm.RadioButton = e.Form.Controls("添加")
        If hl.Checked = True Then
            Dim ndr As DataRow = dt.AddNew
            For i As Integer = 0 To dr.Count - 1
                ndr(dr(i)) = Data(i)
            Next
            ndr("日期") = e.Form.Controls("DateTimePicker1").Text
        End If
        
        \'-----更新和跳过模式-----\'
        Dim gx As WinForm.RadioButton = e.Form.Controls("更新")
        Dim fq As WinForm.RadioButton = e.Form.Controls("放弃")
        If gx.Checked = True Or fq.Checked = True Then
            \'MessageBox.Show("进入更新模式")
            \'-----判定关键字段为第几字段----
            Dim key1 As String = e.Form.Controls("key1").Value
            Dim key2 As String = e.Form.Controls("key2").value
            Dim data1,data2 As String
            \'----根据关键字段在字段列表中的位置,取出要导入的数据值
            For i As Integer = 0 To dr.Count -1
                \'MessageBox.Show(dr(i) & "->" & dr(i) = key1 )
                If dr(i) = key1 Then
                    data1 = data(i)
                End If
                If dr(i) = key2 Then
                    data2 =data(i)
                End If
            Next
            \' MessageBox.Show(key1 & "=" & data1 & "--" & key2 & "=" & data2)
            \'----查找导入表的关键字段同值数据行的条件-----
            Dim find As DataRow
            Dim exp As String
            If data1 <> "" And data2 <> "" Then
                exp = cexp("[" & key1 & "] = \'{0}\' and [" & key2 & "] = \'{1}\'",data1,data2)
            ElseIf data1 <> "" Then
                exp = cexp("[" & key1 & "] = \'{0}\'",data1)
            ElseIf data2 <> "" Then
                exp = cexp("[" & key2 & "] = \'{0}\'",data2)
            End If
            \'----查找导入表符合条件的行------\'
            If exp IsNot Nothing Then
                find = DataTables(tblname.Value).find(exp)
            End If
            \'MessageBox.Show("exp=" & exp )
            If find IsNot Nothing Then
                \'-------找到后,模式为更新就更新数据,否则跳过-------
                If gx.Checked = True Then
                    For i As Integer = 0 To dr.Count - 1
                        find(dr(i)) = Data(i)
                    Next
                End If
            Else
                \'------没找到,添加数据------
                Dim ndr As DataRow = dt.AddNew
                For i As Integer = 0 To dr.Count - 1
                    ndr(dr(i)) = Data(i)
                Next
                ndr("日期") = e.Form.Controls("DateTimePicker1").Text
            End If
        End If
    Next
Next
jdt.Value = jdt.Maximum

--  作者:有点蓝
--  发布时间:2015/8/8 9:37:00
--  
上传示列上来看看,这个看的眼都花了
--  作者:江南小城
--  发布时间:2015/8/8 10:26:00
--  
老师,在导入数据时同时把时间列的数据拆分开,把一、二、三、四、五分配到星期列中。


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:拆分.rar


--  作者:江南小城
--  发布时间:2015/8/9 10:17:00
--  
以下是引用江南小城在2015/8/8 10:26:00的发言:
老师,在导入数据时同时把时间列的数据拆分开,把一、二、三、四、五分配到星期列中。


 下载信息  [文件大小:1.3 MB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:拆分.rar
老师好,请帮忙。


--  作者:大红袍
--  发布时间:2015/8/9 12:04:00
--  

 导入以后,再处理。

 

For Each r As Row In Tables("表A").rows
    Dim ary() As String = r("第一列").split(",")
    If ary.length > 1 Then
        r("第二列") = ary(1)
    End If
Next


--  作者:江南小城
--  发布时间:2015/8/9 21:34:00
--  
拆分列内容,谢谢老师。


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

--  作者:有点蓝
--  发布时间:2015/8/9 21:51:00
--  
加个
r("日期") = ary(0)

--  作者:神一样的男人
--  发布时间:2015/8/9 22:00:00
--  
你好你好
--  作者:江南小城
--  发布时间:2015/8/9 22:01:00
--  
不行,我感觉为影响菜单的点击。
[此贴子已经被作者于2015/8/9 22:08:03编辑过]

--  作者:江南小城
--  发布时间:2015/8/9 22:13:00
--  

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