Foxtable(狐表)用户栏目专家坐堂 → EXCEL导入问题[已解決]


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

主题:EXCEL导入问题[已解決]

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


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
EXCEL导入问题[已解決]  发帖心情 Post By:2014/1/9 12:59:00 [只看该作者]

单个SHEET导入到狐表里无问题.
这个是导入指定表
    Dim Sheet As XLS.Sheet = Book.Sheets( 0)  
但想同时把多个SHEET导入,搞不到

比如EXCEL里有N个SHEET(数量不定),但表结构是相同的

如何做到?

[此贴子已经被作者于2014-1-10 20:01:01编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/1/9 14:09:00 [只看该作者]

使用代码操作,怎么样都可以. http://www.foxtable.com/help/topics/2334.htm

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


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2014/1/9 17:19:00 [只看该作者]

 

Dim Sheet As XLS.Sheet = Book.Sheets(0)
这个是导入单个SHEET

如果加一个变量
dim nom as single

for nom = 1 to 50  '(比如知道是50个SHEET)

写成这样
Dim Sheet As XLS.Sheet = Book.Sheets(nom)

'---执行代码

next


结果是出错的..


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


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

 不应该有错才对

Dim Book As New XLS.Book("d:\test.xls") 
For i As Integer = 0 To book.sheets.count - 1
   msgbox(book.sheets(i).name)
Next

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


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2014/1/10 12:48:00 [只看该作者]

Dim Book As New XLS.Book("d:\test.xls")
For i As Integer = 0 To book.sheets.count - 1
   msgbox(book.sheets(i).name)
Next

这个成功能自动导入所有SHEET了.
但导入后,FOXTABLE的表变成全白一片,是不是SHEET太多?(36页)
就算再ResumeRedraw都沒有用
要保存关闭项目再打开,
表就重新显示到.
这个要怎解決?

我用了个笨方法: 导入后保存表,卸载表再加载表.
但真的覺得很笨...


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/1/10 14:10:00 [只看该作者]

完整代码发出来看看.

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


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2014/1/10 14:59:00 [只看该作者]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim Book As New XLS.Book(dlg.FileName)
   
   
    Dim p As WinForm.ProgressBar = e.Form.Controls("ProgressBar1") '---进度条
    p.Maximum = book.sheets.count - 1 + 1
    'MainTable.Rows.Count
    p.Minimum = 0
    p.Value = 0
    Application.DoEvents()
    e.Form.Controls("Label进度1").Text =  "导入"
    e.Form.TimerEnabled = True
    e.Form.Controls( "导入状态" ).Visible = True
    For i As Integer = 0 To book.sheets.count - 1
        If book.sheets(i).name <> "盘点表-结存表" Then
            Application.DoEvents()
            e.Form.Controls("Label进度1").Text = "导入 '" & book.sheets(i).name & "' 分页." & book.sheets.count - 1
           
            ' msgbox(book.sheets(i).name)
            Dim Sheet As XLS.Sheet = Book.Sheets(i)  '合并第一个表
            Tables("石仓").StopRedraw()
           
            '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
            Dim nms() As String = { "S日期","工單號碼","出倉重量","null1","入倉重量","null1","記事" }
            '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
            For n As Integer = 4 To Sheet.Rows.Count -1
                Dim bh0 As String = sheet(n,0).Text
                Dim bh1 As String = sheet(n,1).Text
                Dim bh2 As String = sheet(n,2).Text
                Dim bh44 As String = sheet(0,4).Text
                Dim bh00 As String = sheet(0,0).Text
                Dim bh22 As String = sheet(0,2).Text
                Dim bh7 As String = n
                Dim bh5 As String = sheet(0,5).Text
                If DataTables("石仓").Find("工單號碼 Is Null") Is Nothing Then '如果不存在同编号的订单
                    '            If DataTables("石仓").Find("SIZE = '" & bh5 & "'and S日期 ='" & bh0 & "'and 工單號碼 = '" & bh1 & "'and 出倉重量 = '" & bh2 & "'") Is Nothing Then
                    If DataTables("石仓").Find("SIZE = '" & bh5 & "'and 等級 ='" & bh44 & "'and 客戶 = '" & bh00 & "'and 工單號碼 = '" & bh1 & "' And 石類 = '" & bh22 & "'and 行记录 = '" & bh7 & "'") Is Nothing Then
                       
                        Dim r As Row = Tables("石仓").AddNew()
                        For m As Integer = 0 To nms.Length - 1
                            r(nms(m)) = Sheet(n,m).Value
                        Next
                        r("SIZE") = sheet(0,5).Text
                        r("客戶") = sheet(0,0).Text
                        r("石類") = sheet(0,2).Text
                        r("等級") = sheet(0,4).Text
                        r("行记录") = n
                       
                    End If
                   
                End If
               
            Next
            Tables("石仓").Rows.Delete(Tables("石仓").Rows.Count - 1)
            p.Value = p.Value + 1
        End If
    Next
   
   
   
    Application.DoEvents()
    e.Form.Controls("Label进度1").Text = "保存中......."
    Tables("石仓").ResumeRedraw()
    CurrentTable.DataTable.Save()
    p.Value = p.Value + 1
    e.Form.Controls( "导入状态" ).Visible = False
   
    If DataTables.Contains("石仓")  Then '如果石仓已经加载
        DataTables.Unload("石仓") '卸载石仓
    End If
   
    If DataTables.Contains("石仓") = False Then '如果石仓没有加载
        DataTables.Load("石仓") '加载石仓
    End If
    MainTable = Tables("石仓")
End If

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/1/10 15:01:00 [只看该作者]

Tables("石仓").StopRedraw() 在循环内

Tables("石仓").ResumeRedraw() 在循环外

当然会这样了.  你执行了多少次的StopRedraw就要执行多少次的ResumeRedraw才会恢复

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


加好友 发短信
等级:一尾狐 帖子:488 积分:3358 威望:0 精华:0 注册:2013/4/17 21:14:00
  发帖心情 Post By:2014/1/10 15:44:00 [只看该作者]

果然是这样!!

太感谢BIN老師了.


 回到顶部