以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  EXCEL导入问题[已解決]  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=44806)

--  作者:realredred
--  发布时间:2014/1/9 12:59:00
--  EXCEL导入问题[已解決]
单个SHEET导入到狐表里无问题.
这个是导入指定表
    Dim Sheet As XLS.Sheet = Book.Sheets( 0)  
但想同时把多个SHEET导入,搞不到

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

如何做到?

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

--  作者:Bin
--  发布时间:2014/1/9 14:09:00
--  
使用代码操作,怎么样都可以. http://www.foxtable.com/help/topics/2334.htm
--  作者:realredred
--  发布时间: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


结果是出错的..


--  作者:有点甜
--  发布时间: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
--  发布时间: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
--  发布时间:2014/1/10 14:10:00
--  
完整代码发出来看看.
--  作者:realredred
--  发布时间: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
--  发布时间:2014/1/10 15:01:00
--  
Tables("石仓").StopRedraw() 在循环内

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

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

--  作者:realredred
--  发布时间:2014/1/10 15:44:00
--  

果然是这样!!

太感谢BIN老師了.