以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]可否粘贴多行数据?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=89483)

--  作者:pladic
--  发布时间:2016/8/23 8:49:00
--  [求助]可否粘贴多行数据?
能否从EXCEL文档中,复制多行,然后粘贴到同结构的表中?(假定数据完全符合规范)
如果可以,设定的自动编号列能否自动赋值?还是粘贴后,手动添加。

--  作者:大红袍
--  发布时间:2016/8/23 9:15:00
--  

 可以粘贴的啊,自动编号参考

 

http://www.foxtable.com/webhelp/scr/2403.htm

 


--  作者:pladic
--  发布时间:2016/8/23 11:30:00
--  回复:(大红袍) 可以粘贴的啊,自动编号参考...
Select e.DataCol.Name
    Case "类别"
        If e.DataRow.IsNull("类别") Then
            e.DataRow("编号") = Nothing
        Else
            Dim lb As String = e.DataRow("类别")
            If e.DataRow("编号").StartsWith(lb) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(编号)","类别 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(2,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("编号") = lb & Format(idx,"000")
            End If
        End If
End Select

我设计的编号生成格式为 编号+“-”+5位数字。其中编号长度不是固定为两位。所以,我加入一个“-”。先检测“-”的位置,然后从这个位置后截取数字,判断最大值。
返回字符串位置的函数是什么?

--  作者:大红袍
--  发布时间:2016/8/23 11:39:00
--  
Select e.DataCol.Name
    Case "类别"
        If e.DataRow.IsNull("类别") Then
            e.DataRow("编号") = Nothing
        Else
            Dim lb As String = e.DataRow("类别")
            If e.DataRow("编号").StartsWith(lb) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(编号)","类别 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(lb.length+1)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("编号") = lb & "-" & Format(idx,"00000")
            End If
        End If
End Select

--  作者:pladic
--  发布时间:2016/8/23 15:22:00
--  
类别的长度不定,所以不是简单的Substring(lb.length+1)。
方法一是:先判断“-”字符的位置,然后从这个位置+1处截取后面的字符串。
方法二是:直接从字符串最右边开始,截取5个字符。
类似VB中的,Instr或Rrigh的函数。
[此贴子已经被作者于2016/8/23 15:24:37编辑过]

--  作者:大红袍
--  发布时间:2016/8/23 15:37:00
--  
 看4楼,没问题。如果有问题,上传实例。
--  作者:pladic
--  发布时间:2016/8/24 10:38:00
--  回复:(大红袍)?看4楼,没问题。如果有问题,上...
是,没问题了。
谢谢专家!
虽然没太明白substring(lb.length+1)的意思
[此贴子已经被作者于2016/8/24 10:39:04编辑过]