以文本方式查看主题 - 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) 如果加一个变量 for nom = 1 to 50 \'(比如知道是50个SHEET) 写成这样 \'---执行代码 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") 这个成功能自动导入所有SHEET了. 我用了个笨方法: 导入后保存表,卸载表再加载表. |
-- 作者: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老師了. |