Foxtable(狐表)用户栏目专家坐堂 → 不规则excel表格导入


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

主题:不规则excel表格导入

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


加好友 发短信
等级:童狐 帖子:288 积分:2404 威望:0 精华:0 注册:2017/6/19 23:37:00
不规则excel表格导入  发帖心情 Post By:2017/8/21 22:27:00 [只看该作者]

老师请教下,想要导入如图所示的不规则的excel表格,入下图。利用如下代码 Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog dlg.Filter= "excel文件|*.xlsx; *.xls" '设置筛选器 Dim dr As DataRow If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮 Dim Book As New XLS.Book(dlg.FileName) Dim Sheet As XLS.Sheet = Book.Sheets(0) Tables("阿里1688明细表").StopRedraw() '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题 For n As Integer = 1 To Sheet.Rows.Count -1 Dim r As Row = Tables("阿里1688明细表").AddNew() r("订单编号") = sheet(n,0).text Next Tables("阿里1688明细表").ResumeRedraw() End If DataTables("阿里1688明细表").save 测试导入第一列,结果如下图。也就是合并单元格只导入一样。那么想要得到如果所示的结果,该如何操作呢?非常感谢。
图片点击可在新窗口打开查看此主题相关图片如下:需要导入的不规则表格.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:得到的结果.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:想要的结果.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/8/21 22:47:00 [只看该作者]

导入后做个循环赋值

For i As Integer = 1  To Tables("表A").Rows.Count - 1
    Dim r As Row = Tables("表A").Rows(i)
    If r.IsNull("订单编号") Then r("订单编号") = Tables("表A").Rows(i-1)("订单编号")
Next

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


加好友 发短信
等级:童狐 帖子:288 积分:2404 威望:0 精华:0 注册:2017/6/19 23:37:00
  发帖心情 Post By:2017/8/22 8:44:00 [只看该作者]

这个表的订单会每天积累,后期数量会很大,这样在每次执行循环复制,计算量会不会很大,效率会不会受到影响呢?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/22 10:45:00 [只看该作者]

以下是引用jackchan120925在2017/8/22 8:44:00的发言:
这个表的订单会每天积累,后期数量会很大,这样在每次执行循环复制,计算量会不会很大,效率会不会受到影响呢?

 

效率应该是没问题的。你还可以针对只是新增的行才修改。

 

只有这种方法了,没有别的方法。

 

 


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


加好友 发短信
等级:童狐 帖子:288 积分:2404 威望:0 精华:0 注册:2017/6/19 23:37:00
  发帖心情 Post By:2017/8/22 20:57:00 [只看该作者]

好的谢谢,针对新增行来执行,能减少相当大的计算量了

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


加好友 发短信
等级:童狐 帖子:288 积分:2404 威望:0 精华:0 注册:2017/6/19 23:37:00
  发帖心情 Post By:2017/8/22 21:45:00 [只看该作者]

还想请问下,如果我希望把空的行删除,而不是用合并单元格的订单来填充,用以下代码,思路是否正确呢? 我测试了下,只删除一半的订单编号为空白的行,不知问题出在何处。 导入后做个循环赋值 For i As Integer = 1 To Tables("表A").Rows.Count - 1 Dim r As Row = Tables("表A").Rows(i) If r.IsNull("订单编号") Then r.delete Next

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/8/22 21:51:00 [只看该作者]

麻烦以后把代码格式一下,方便你我他!!

删除要倒序

For i As Integer = Tables("表A").Rows.Count - 1 To 0
    Dim r As Row = Tables("表A").Rows(i)
    If r.IsNull("订单编号") Then r.delete
Next

或者直接删除即可
DataTables("表A").DeleteFor("订单编号 is null")

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


加好友 发短信
等级:童狐 帖子:288 积分:2404 威望:0 精华:0 注册:2017/6/19 23:37:00
  发帖心情 Post By:2017/8/22 21:59:00 [只看该作者]

非常感谢,下次修正代码格式

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


加好友 发短信
等级:童狐 帖子:288 积分:2404 威望:0 精华:0 注册:2017/6/19 23:37:00
  发帖心情 Post By:2017/8/22 22:05:00 [只看该作者]

还有个问题请教 效率应该是没问题的。你还可以针对只是新增的行才修改。-------我该如何界定新增的行呢?或者说获得新增行的一个集合呢?

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/8/22 22:12:00 [只看该作者]


 回到顶部