以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  高速合并如何实现相同物料代码合并数量  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=196257)

--  作者:zjykyy
--  发布时间:2025/4/13 8:21:00
--  高速合并如何实现相同物料代码合并数量
高速合并多个excel文件时,如何能够将物料代码相同的行的自动合并为一行,并且数量自动累加。即确保物料代码列唯一,而总数量不变。物料代码没有重复的行正常引入即可。
--  作者:zjykyy
--  发布时间:2025/4/13 8:25:00
--  
如果可以在高速合并的三个选项中增加这个功能就更好了。


--  作者:有点蓝
--  发布时间:2025/4/13 20:13:00
--  
参考:http://www.foxtable.com/webhelp/topics/2334.htm,合并的时候先查一查是否有同代码的行,有就合并,没有就新增

Dim Book As New XLS.Book("c:\\test\\订单.xls")
Dim 
Sheet As XLS.Sheet = Book.Sheets(0)
Tables(
"订单").StopRedraw()
Dim 
nms() As String = {"物料代码","数量","列1","列2","……"}
For n As Integer = 1 To Sheet.Rows.Count -1
    
Dim bh As String = sheet(n,0).Text
    
Dim dr As DataRow = DataTables("订单").Find("物料代码 = \'" & bh & "\'")
    If 
dr Is Nothing Then \'如果不存在同编号的订单
        
dr =  DataTables("订单").AddNew()
    For 
m As Integer = 0 To nms.Length - 1
        
dr(nms(m)) = Sheet(n,m).Value
    Next
else ‘如果存在就合并数量
dr("数量") = dr("数量")+Sheet(n,1).Value
    End If
Next
Tables(
"订单").ResumeRedraw()

--  作者:zjykyy
--  发布时间:2025/4/14 21:21:00
--  
通过版主的指导,已实现需求。但是又碰到另一个问题。我想用OpenFileDialog对话框方式选择excel,而不是只能指定名称和目录读取,请教如何实现。代码如下:

DataTables("随货单引入").DataRows.Clear() \'清除以前引入的数据

Dim Book As New XLS.Book("c:\\test\\工作簿3.xls")

Dim Sheet As XLS.Sheet = Book.Sheets(0)

Dim nms() As String = {65,"商品编码","商品名称","规格","生产企业","产地","单位","通用名称","按批号开票"}

For n As Integer = 1 To Sheet.Rows.Count -1

    Dim bh As String = sheet(n,1).Text

    Dim dr As DataRow = DataTables("随货单引入").Find("商品编码 = \'" & bh & "\'")

    If dr Is Nothing Then \'如果不存在同编号的订单

        dr =  DataTables("随货单引入").AddNew()

    For m As Integer = 0 To nms.Length - 1

        dr(nms(m)) = Sheet(n,m).Value

    Next

Else \'如果存在就合并数量

dr("销售数量") = dr("销售数量") + Sheet(n,10).Value

    End If

Next

DataTables("随货单引入").DeleteFor("单位 Is Null")\'删除合计行



--  作者:有点蓝
--  发布时间:2025/4/14 22:25:00
--  
Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= 
"Excel文件|*.xls" \'设置筛选器
If
 dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show(
"你选择的是:" & dlg.FileName,"提示"\'提示用户选择的文件

DataTables("随货单引入").DataRows.Clear() \'清除以前引入的数据

Dim Book As New XLS.Book(dlg.FileName)

……

……

End If