以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 导入带图片的excel bom表提示超出数组界限 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=184576) |
||||
-- 作者:elfing -- 发布时间:2022/12/14 12:21:00 -- 导入带图片的excel bom表提示超出数组界限 如代码所示,学习论坛帖子里面的经验后编写这段代码用来导入带图片的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 |
||||
-- 作者:有点蓝 -- 发布时间:2022/12/14 13:41:00 -- 代码没有问题。应该是图片位置有问题 |
||||
-- 作者:elfing -- 发布时间:2022/12/14 13:55:00 -- [求助] bom如附件,表格昨天也导入过,都是正常的,到了昨天半夜突然出的问题
|
||||
-- 作者:有点蓝 -- 发布时间:2022/12/14 14:11:00 -- 重新把代码发一下,去掉行号 |
||||
-- 作者:elfing -- 发布时间: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
|
||||
-- 作者:有点蓝 -- 发布时间:2022/12/14 14:36:00 -- 文件本身应该有问题,具体什么问题不清楚。加上这么一句我测试了可以 Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName) Output.Show(1) Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) 另外索引问题应该是下面代码的原因,可能execl里面的列数量和表格的列数不一致 For i As Integer = 0 To Tables("BOM").Cols.Count - 1 ro(i) = ary(n, i + 1) Next |
||||
-- 作者:elfing -- 发布时间:2022/12/14 14:43:00 -- 多谢提醒,是列的问题,我在foxtable里面加了两列,excel里面没有,导入的时候就出错了 请问如何编码可以只导入table里面有的列呢?
|
||||
-- 作者:有点蓝 -- 发布时间:2022/12/14 15:00:00 -- 先把execl第一行的列名和索引记录下来使用,参考:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=102185&skin=0,看3楼的用法 |