以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  不规则excel表格导入  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=105530)

--  作者:jackchan120925
--  发布时间:2017/8/21 22:27:00
--  不规则excel表格导入
老师请教下,想要导入如图所示的不规则的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
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间: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
--  发布时间:2017/8/22 8:44:00
--  
这个表的订单会每天积累,后期数量会很大,这样在每次执行循环复制,计算量会不会很大,效率会不会受到影响呢?
--  作者:有点甜
--  发布时间:2017/8/22 10:45:00
--  
以下是引用jackchan120925在2017/8/22 8:44:00的发言:
这个表的订单会每天积累,后期数量会很大,这样在每次执行循环复制,计算量会不会很大,效率会不会受到影响呢?

 

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

 

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

 

 


--  作者:jackchan120925
--  发布时间:2017/8/22 20:57:00
--  
好的谢谢,针对新增行来执行,能减少相当大的计算量了
--  作者:jackchan120925
--  发布时间: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
--  作者:有点蓝
--  发布时间: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
--  发布时间:2017/8/22 21:59:00
--  
非常感谢,下次修正代码格式
--  作者:jackchan120925
--  发布时间:2017/8/22 22:05:00
--  
还有个问题请教 效率应该是没问题的。你还可以针对只是新增的行才修改。-------我该如何界定新增的行呢?或者说获得新增行的一个集合呢?
--  作者:有点蓝
--  发布时间:2017/8/22 22:12:00
--  
参考:http://www.foxtable.com/webhelp/scr/0428.htm