Foxtable(狐表)用户栏目专家坐堂 → 导入带图片的excel bom表提示超出数组界限


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

主题:导入带图片的excel bom表提示超出数组界限

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


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
导入带图片的excel bom表提示超出数组界限  发帖心情 Post By:2022/12/14 12:21:00 [显示全部帖子]

如代码所示,学习论坛帖子里面的经验后编写这段代码用来导入带图片的bom清单,然后把图片上传到ftp,上传了几次没问题,后来调整了一下表格的格式,测试中突然出现无法导入的情况,图片列无法命名,结束后提示重新保存导入的表格,请教一下代码有什么问题
以下内容为程序代码:

1 Dim dlg As New OpenFileDialog
2 dlg.Filter = "Excel文件|*.xls;*.xlsx"
3 If dlg.ShowDialog = DialogResult.OK Then
4 Dim App As New MSExcel.Application
5 Try
6 Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
7 Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
8 Dim Rg As MSExcel.Range = Ws.UsedRange
9 Dim ary = rg.value
10 Dim dic As New Dictionary(Of Integer, List(Of Object))
11 Dim ftp1 As New FtpClient
12 ftp1.Host = "***.**.**.*"
13 ftp1.Account = "elf***"
14 ftp1.Password = "********"
15 For Each s As Object In ws.Shapes
16 Dim rng = s.TopLeftCell
17 If dic.ContainsKey(rng.Row) = False Then
18 Dim ls As New List(Of Object)
19 ls.add(s)
20 dic.Add(rng.Row, ls)
21 Else
22 dic(rng.Row).add(s)
23 End If
24 Next
25 For n As Integer = 2 To rg.Rows.Count
26 Dim ro As Row = Tables("BOM").AddNew
27 For i As Integer = 0 To Tables("BOM").Cols.Count - 1
28 ro(i) = ary(n, i + 1)
29 Next
30 If dic.ContainsKey(n) Then
31 Dim ls = dic(n)
32 Dim line As New List(Of String)
33 For j As Integer = 0 To ls.count - 1
34 Dim name = ary(n, 5) & "_" & j & ".jpg"
35 Dim khxm = "/产品图片/" & ary(n, 3)
36 ls(j).copy
37 ClipBoard.GetImage.save(projectPath & "Images/产品图片/" & name)
38 If ftp1.DirExists(khxm) Then
39 Else
40 ftp1.MakeDir(khxm)
41 End If
42 ftp1.Upload(projectPath & "Images/产品图片/" & name, khxm & "/" & name)
43 line.add(khxm & "/" & name)
44 Next
45 ro.DataRow.lines("零件图片") = line
46 End If
47 Next
48 MessageBox.Show("导入成功!", "恭喜!")
49 Catch ex As exception
50 msgbox(ex.message)
51 MessageBox.Show("导入失败!", "恭喜!")
52 Finally
53 app.quit
54 End Try
55 End If

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


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
[求助]  发帖心情 Post By:2022/12/14 13:55:00 [显示全部帖子]

bom如附件,表格昨天也导入过,都是正常的,到了昨天半夜突然出的问题
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:kx11 phev bom1.xlsx


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


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
[求助]  发帖心情 Post By:2022/12/14 14:15:00 [显示全部帖子]

        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))
                Dim ftp1 As New FtpClient
                ftp1.Host = "120.27.45.3"
                ftp1.Account = "elfing"
                ftp1.Password = "12345678"
                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
                For n As Integer = 2 To rg.Rows.Count
                    Dim ro As Row = Tables("BOM").AddNew
                    For i As Integer = 0 To Tables("BOM").Cols.Count - 1
                        ro(i) = ary(n, i + 1)
                    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, 5) & "_" & j & ".jpg"
                            Dim khxm = "/产品图片/" & ary(n, 3)
                            ls(j).copy
                            ClipBoard.GetImage.save(projectPath & "Images/产品图片/" & name)
                            If ftp1.DirExists(khxm) Then
                            Else
                                ftp1.MakeDir(khxm)
                            End If
                            ftp1.Upload(projectPath & "Images/产品图片/" & name, khxm & "/" & name)
                            line.add(khxm & "/" & name)
                        Next
                        ro.DataRow.lines("零件图片") = line
                    End If
                Next
                MessageBox.Show("导入成功!", "恭喜!")
            Catch ex As exception
                msgbox(ex.message)
                MessageBox.Show("导入失败!", "恭喜!")
            Finally
                app.quit
            End Try
        End If

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


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
  发帖心情 Post By:2022/12/14 14:43:00 [显示全部帖子]

多谢提醒,是列的问题,我在foxtable里面加了两列,excel里面没有,导入的时候就出错了
请问如何编码可以只导入table里面有的列呢?

 回到顶部