Foxtable(狐表)用户栏目专家坐堂 → 导入数据


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

主题:导入数据

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 8:44:00 [显示全部帖子]

只能使用vba处理,2楼的额用法用不了。如果只需要图片,把一楼代码去掉给表格赋值的代码即可

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 9:04:00 [显示全部帖子]

没有办法结合,他们是完全不同的组件和用法。

如果要在1楼的代码里指定导入列,可以这样
Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    
    Dim App As New MSExcel.Application
    try
        Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
        Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
        Dim Rg As MSExcel.Range = Ws.UsedRange
        Dim ary = rg.value
        Dim dic As new Dictionary(of Integer, List(of object))
        For Each s As object In ws.Shapes
            Dim rng = s.TopLeftCell
            If dic.ContainsKey(rng.Row) = False Then
                Dim ls As new List(Of object)
                ls.add(s)
                dic.Add(rng.Row, ls)
            Else
                dic(rng.Row).add(s)
            End If
        Next
        Dim nms() As String = {"编号","产品","客户","雇员","单价","折扣","数量","日期"}
        Dim s1 As new List(of String)
        s1.Addrange(nms)
        Dim dict As new Dictionary(of String,Integer)
        For m As Integer = 1 To rg.Cols.Count
            If s1.Contains(ary(0,m)) Then
                dict.add(ary(0,m),m)
            End If
        Next
        For n As Integer = 2 To rg.Rows.Count
            If DataTables("订单").Find("编号 = '" & ary(n,dict("编号")) & "'") Is Nothing Then
                Dim ro As Row = Tables("订单").AddNew
                For i As Integer = 0 To nms.length - 1
                    ro(i) = ary(n,dict(nms(i)))
                Next
                If dic.ContainsKey(n) Then
                    Dim ls = dic(n)
                    Dim line As new List(Of String)
                    For j As Integer = 0 To ls.count-1
                        Dim name = ary(n, 7) & "_" & j & ".jpg"
                        ls(j).copy
                        ClipBoard.GetImage.save(projectPath & "attachments/" & name)
                        line.add(name)
                    Next
                    ro.DataRow.lines("照片") = line
                End If
            End If
        Next
        MessageBox.Show("导入成功!","恭喜!")
    catch ex As exception
        msgbox(ex.message)
        MessageBox.Show("导入失败!","恭喜!")
    finally
        app.quit
    End try
End If

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 9:19:00 [显示全部帖子]

二楼的代码这种用法无法获取图片,只能使用4楼的方法

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 9:33:00 [显示全部帖子]

        For m As Integer = 1 To rg.Cols.Count
改为

        For m As Integer = 1 To rg.Columns.Count


 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 9:41:00 [显示全部帖子]

            If s1.Contains(ary(0,m)) Then
                dict.add(ary(0,m),m)
            End If
改为
            If s1.Contains(ary(1,m)) Then
                dict.add(ary(1,m),m)
            End If

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 10:45:00 [显示全部帖子]

请上传实例测试

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106325 积分:540766 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/30 11:21:00 [显示全部帖子]

图片不在合适的位置上,图片顶部超出单元格,被认为是第一行的图片。

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


 回到顶部