以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] Excel文件合并出错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100818) |
-- 作者:dj68301367 -- 发布时间:2017/5/18 22:02:00 -- [求助] Excel文件合并出错 问题如图片红色框所示。如果单元格中全是数值的就是会出错,这会不会跟表中的单元格是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组名称") |
-- 作者:wyz20130512 -- 发布时间:2017/5/18 22:33:00 -- http://www.foxtable.com/webhelp/scr/2629.htm |
-- 作者:有点色 -- 发布时间:2017/5/18 22:39:00 -- merger有bug,你要换一种方法合并数据的。
http://www.foxtable.com/webhelp/scr/2334.htm
|
-- 作者:dj68301367 -- 发布时间:2017/5/19 10:05:00 -- 老师,按你的方法解决了,但又有另一个问题了,如下图,SQLFind与Find的结果不一致。。。我想直接从后台调数据,SQLfind应该怎么样修改。 Dim dr As DataRow = dt3.SQLFind("规格=\'" & r("Comment") & "\' And 封装 =\'" & r("Footprint") & "\'") [此贴子已经被作者于2017/5/19 10:05:07编辑过]
|
-- 作者:有点色 -- 发布时间:2017/5/19 10:08:00 -- sqlfind,是对于已经保存的数据进行查找的(你新增的数据没保存)
你可以先用find查找,如果找不到的话,再用sqlfind查找
Dim dr As DataRow = dt3.Find("规格=\'" & r("Comment") & "\' And 封装 =\'" & r("Footprint") & "\'") If dr Is Nothing Then dr = dt3.SQLFind("规格=\'" & r("Comment") & "\' And 封装 =\'" & r("Footprint") & "\'") End If
[此贴子已经被作者于2017/5/19 10:36:49编辑过]
|
-- 作者:dj68301367 -- 发布时间:2017/5/19 10:34:00 -- 老师,我在查找之前,已经对数据进行了保存,而且数据表中的DATAChange 增加了E.datarow.save 就是搞不懂为什么?
Dim tb As Table = Tables("PCBA-BOM_Table1") Dim dt2 As DataTable = DataTables("物料表")
DataTables("对应表").Save()
For i As Integer = 0 To tb.Rows.Count - 1 |
-- 作者:有点色 -- 发布时间:2017/5/19 10:36:00 -- 用5楼的方法,查两次。 |
-- 作者:有点色 -- 发布时间:2017/5/19 10:38:00 -- Dim tb As Table = Tables("PCBA-BOM_Table1") Dim dt2 As DataTable = DataTables("物料表")
DataTables("对应表").Save()
For i As Integer = 0 To tb.Rows.Count - 1 |
-- 作者:dj68301367 -- 发布时间:2017/5/19 10:47:00 -- 老师,你这个方法,自己保存的数据可以用Find查得出来,
如果是其它用户保存的,用Sql还是查不出来,必需要把对应表的数据再次加载才可以,对应表的数据越来越多了,加载时间太长。
DataTables("对应表").Load() ‘这个我不想要
会不会因为规格和封装的数据都是数字的问题呀?? [此贴子已经被作者于2017/5/19 10:47:37编辑过]
|
-- 作者:有点色 -- 发布时间:2017/5/19 10:54:00 -- 认认真真看8楼代码。不需要load数据。 |