Foxtable(狐表)用户栏目专家坐堂 → [求助] Excel文件合并出错


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

主题:[求助] Excel文件合并出错

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


加好友 发短信
等级:小狐 帖子:367 积分:2805 威望:0 精华:0 注册:2015/4/12 12:13:00
[求助] Excel文件合并出错  发帖心情 Post By:2017/5/18 22:02:00 [显示全部帖子]


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

问题如图片红色框所示。如果单元格中全是数值的就是会出错,这会不会跟表中的单元格是String格式有关。。。。。。

 

PCBA-BOM_But导入_Click

 

If e.Form.Controls("DropBox1").text > "" Then

    Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog

    dlg.Filter= "Excel文件|*.xls;*.xlsx" '设置筛选器

    dlg.InitialDirectory =  "d:\king\"

   

    If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮

        e.Form.Controls("But生成表").performclick

       

        Dim mg As New Merger

        mg.SourcePath = dlg.FileName

        mg.Format = "excel" '指定格式

        mg.SourceTableName =  "sheet1$" '"采购订单序时簿$" ' & "$" '指定要合并的表

        mg.DataTableName = Vars("TbName") '指定接收数据的表

        mg.Merge() '开始合并

       ' e.Form.Controls("But生成物料1").performclick

    Else

        Exit Sub

    End If

Else

    MessageBox.Show("请输入产品或半成品代码后再导入")

End If

 

 

PCBA-BOM_But生成表_Click

 

Vars("Str") = e.Form.Controls("DropBox1").text

 

Dim tx() As String = {"Comment","Footprint","子阶代码","物料名称","规格型号","Quantity","单位","车间","物料属性","仓库"}

Vars("TbName") = "PCBA-BOM _ " & Vars("Str")

Dim dtb As New DataTableBuilder(Vars("TbName"))

For i As Integer = 0 To tx.Length - 1

    dtb.AddDef(tx(i), Gettype(String), 200)

Next

dtb.Build()

'Return

Dim tb As Table = Tables("PCBA-BOM_Table1")

Dim dt As DataTable = DataTables(Vars("TbName"))

Dim dt2 As DataTable = DataTables("物料表")

 

tb.DataSource = dt

tb.DataTable.DataRows.Clear

 

e.Form.text = Vars("TbName")

tb.AutoSizeCols

Dim cb As WinForm.ComboBox = e.Form.Controls("ComBOM类型")

Dim tab As WinForm.TabControl = e.Form.Controls("TabControl1")

tab.TabPages(2).Visible = False

cb.DataSource ="BOM组"

cb.DisplayMember = "BOM组名称"

cb.ValueMember = "代码"

cb.DataFilter = "代码 is not null"

'cb.ComboList = DataTables("BOM组").GetComboListString("BOM组名称")


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


加好友 发短信
等级:小狐 帖子:367 积分:2805 威望:0 精华:0 注册:2015/4/12 12:13:00
  发帖心情 Post By:2017/5/19 10:05:00 [显示全部帖子]

老师,按你的方法解决了,但又有另一个问题了,如下图,SQLFind与Find的结果不一致。。。我想直接从后台调数据,SQLfind应该怎么样修改。

    Dim dr As DataRow = dt3.SQLFind("规格='" & r("Comment") & "' And 封装 ='" & r("Footprint") & "'")


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

[此贴子已经被作者于2017/5/19 10:05:07编辑过]

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


加好友 发短信
等级:小狐 帖子:367 积分:2805 威望:0 精华:0 注册:2015/4/12 12:13:00
  发帖心情 Post By:2017/5/19 10:34:00 [显示全部帖子]

老师,我在查找之前,已经对数据进行了保存,而且数据表中的DATAChange 增加了E.datarow.save

就是搞不懂为什么?

 

 

Dim tb As Table = Tables("PCBA-BOM_Table1")
Dim dt As DataTable = DataTables(Vars("TbName"))

Dim dt2 As DataTable = DataTables("物料表")
Dim dt3 As DataTable = DataTables("对应表")

 

DataTables("对应表").Save()
DataTables("对应表").Load()
'保存对应表的数据

 

For i As Integer = 0 To tb.Rows.Count - 1
    Dim r As Row = tb.Rows(i)
   
    Dim dr As DataRow = dt3.sqlFind("规格='" & r("Comment") & "' And 封装 ='" & r("Footprint") & "'")
    If dr IsNot Nothing Then
        If dr.IsNull("物料代码") = False Then
            r("子阶代码") = dr("物料代码")
            Dim dr1 As DataRow = dt2.SQLFind("代码 ='" & r("子阶代码") & "'")
            r("物料名称") = dr1("名称")
            r("规格型号") = dr1("规格型号")
            r("单位") = dr1("单位")
            r("车间") = dr1("车间")
            r("物料属性") = dr1("物料属性")
            r("仓库") = dr1("默认仓库名称")
        Else
'MessageBox.Show("没有找到")
            r("子阶代码") = Nothing           
            r("物料名称") = Nothing
            r("规格型号") = Nothing
            r("单位") = Nothing
            r("车间") = Nothing
            r("物料属性") = Nothing
            r("仓库") = Nothing
        End If
    End If
Next
tb.AutoSizeCols()
MessageBox.Show("物料生成完成")


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


加好友 发短信
等级:小狐 帖子:367 积分:2805 威望:0 精华:0 注册:2015/4/12 12:13:00
  发帖心情 Post By:2017/5/19 10:47:00 [显示全部帖子]

老师,你这个方法,自己保存的数据可以用Find查得出来,

 

如果是其它用户保存的,用Sql还是查不出来,必需要把对应表的数据再次加载才可以,对应表的数据越来越多了,加载时间太长。

 

DataTables("对应表").Load()   ‘这个我不想要

 

会不会因为规格和封装的数据都是数字的问题呀??

[此贴子已经被作者于2017/5/19 10:47:37编辑过]

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


加好友 发短信
等级:小狐 帖子:367 积分:2805 威望:0 精华:0 注册:2015/4/12 12:13:00
  发帖心情 Post By:2017/5/19 11:34:00 [显示全部帖子]


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

有点色老师,我明白8楼的意见,如果Find找不到了,再用SQL再找。

如果是别的用户保存的数据,我自己不LOAD,用Find一定是找不到的,这时用SQLFind还是找不到的。

 

如上图


 回到顶部