以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]从excel表手动导入的空值问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=90811)

--  作者:pladic
--  发布时间:2016/9/22 9:21:00
--  [求助]从excel表手动导入的空值问题
从excel表手动导入table
execel表中一列为字符型,当该列的单元格值为空时,导入table的对应列属性为字符型,错误提示为:
从字符中“”列类型“Double”的转换无效

我加入判断代码,不为空时才赋值
IF sheet(n,m).value isnot nothing
r("列名")=sheet(n,m)
endif

但是,报错依旧。


--  作者:有点蓝
--  发布时间:2016/9/22 9:29:00
--  
贴出完整代码和上传Excel文件测试
--  作者:pladic
--  发布时间:2016/9/22 10:23:00
--  回复:(有点蓝)贴出完整代码和上传Excel文件测试
Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls;*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    \'    MessageBox.Show("你选择的文档为:" & dlg.FileName,"提示")    \'    Dim ip As New 

Importer

    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Dim zong As Integer=sheet.Rows.count-1
    MessageBox.Show("你的文档有效行数为:" & zong,"提示")
    \'Tables("订户信息表").StopRedraw()
    \'Tables("订款信息表").StopRedraw()
    \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    \'Dim nms() As String = { "编号","产品","客户","雇员","单价","折扣","数量","日期" }
    \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    For n As Integer = 2 To Sheet.Rows.Count -1
        Dim r As Row = Tables("订户信息表").AddNew()
        For m As Integer = 0 To 19 \'nms.Length - 1
            Select Case m
                Case 0
                    r("发行员") = Sheet(n,m).Value

    \'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
\'
                Case 1
                    r("一级") = Sheet(n,m).Value
                Case 2
                    r("二级") = Sheet(n,m).Value
                Case 3
                    r("三级") = Sheet(n,m).Value
                Case 4
                    r("单位") = Sheet(n,m).Value
                Case 5
                    r("收刊人") = Sheet(n,m).Value
                Case 6
                    r("地址") = Sheet(n,m).Value
                Case 7
                    r("邮编") = Sheet(n,m).Value
                Case 8
                    r("份数") = Sheet(n,m).Value
                Case 9
                    r("获得方式") = Sheet(n,m).Value
                    \'Case 10
                    \'r("金额") = Sheet(n,m).Value
                    \'Case 11
                    \'r("到款日期") = Sheet(n,m).Value
                Case 12
                    r("电话") = Sheet(n,m).Value
                Case 13
                    r("备注") = Sheet(n,m).Value
                Case 14
                    r("组织征订") = Sheet(n,m).Value
                Case 15
                    If sheet(n,m).value=1
                        r("发刊标识") = False
                    Else
                        r("发刊标识") = True
                    End If
                Case 16
                    If sheet(n,m).value IsNot Nothing
                        r("应发期数") = sheet(n,m).value
                    Else
                        r("应发期数") = ""
                    End If
                    \'Case 17
                    \'r("汇款方式") = Sheet(n,m).Value
                    \'Case 18
                    \'r("汇票号码") = Sheet(n,m).Value
            End Select
            Dim result As String
            Output.Show(Result)
            
        Next
        Forms("批量数据入库").controls("label1").text=n & "/" & zong
        application.Doevents()
    Next
    Tables("订户信息表").ResumeRedraw()
    Tables("订款信息表").ResumeRedraw()
End If

--  作者:pladic
--  发布时间:2016/9/22 10:24:00
--  怎么传附件?
同题
--  作者:pladic
--  发布时间:2016/9/22 10:27:00
--  回复:(有点蓝)贴出完整代码和上传Excel文件测试
  \'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

另外,这段代码是表事件datacolchanged中的代码
复制到BUTTON里后,e.datarow就报错了。

请教

--  作者:有点蓝
--  发布时间:2016/9/22 10:33:00
--  
Dim lb As String = tables(某表).current("发行员")

上传项目和Excel文件测试


--  作者:pladic
--  发布时间:2016/9/22 10:49:00
--  [求助][贴图]回复:(有点蓝)Dim lb As String = tables(某表).cu...
我是用360浏览器,不显示“上传文件”这一栏。
--  作者:pladic
--  发布时间:2016/9/22 10:51:00
--  
这里可以
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:临时入库信息表.xlsx


--  作者:有点蓝
--  发布时间:2016/9/22 10:58:00
--  
狐表中 ("应发期数")是什么列类型?
--  作者:pladic
--  发布时间:2016/9/22 11:06:00
--  
 \'Tables("订户信息表").StopRedraw()
 \'Tables("订款信息表").StopRedraw()

如果单元格的值分别赋给这两个表,如何写订款信息表的赋值代码?