'1.打开要提取数据的工作薄
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xlsx; *.xls;*.xlsm" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
Dim dtb As New DataTableBuilder(FileSys.GetName(dlg.FileName))'定义dtb为新的临时表
End If
'2.设置不需要提取数据的固定工作表
Dim excludeSheets As New List(Of String)'定义一个集合
excludeSheets.Add("产值汇总表")'增加工作表名称
excludeSheets.Add("量价差汇总")'增加工作表名称
excludeSheets.Add("劳务费用分劈表控制")'增加工作表名称
excludeSheets.Add("工程量汇总")'增加工作表名称
excludeSheets.Add("对下计价台账控制")'增加工作表名称
excludeSheets.Add("对下计价台账业务")'增加工作表名称
excludeSheets.Add("工程量汇总旧")'增加工作表名称
'3启动一个隐藏的Excel进程,能够通过代码自动化操作Excel
Dim App As New MSExcel.Application
'App.Visible = True'execl表可见
'4.定义工作薄和工作表
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)'定义wb为工作薄
Dim book As New XLS.Book(dlg.FileName) '定义一个Excel工作簿
Dim Sheet As XLS.Sheet '定义工作表
'5.遍历要提取数据的工作表
For Each sheet In book.Sheets'在工作表中遍历
Dim sheetName As String = sheet.Name.Trim() '取工作表名并前后去空格
If excludeSheets.Contains(sheetName) = False AndAlso sheetName.Contains("业务") = False Then'固定表名称不包括本表名称和工作表名不包含业务
' 创建对应Foxtable结构
Dim dt As New DataTableBuilder(sheetname)'用工作表名创建临时表
dt.AddDef("编码", GetType(String), 50)
dt.AddDef("开累已计价数量", GetType(Double), 50)
dt.AddDef("开累应计未计数量", GetType(Double), 50)
dt.AddDef("开累已计价金额", GetType(Double), 50)
dt.AddDef("序号", GetType(String), 50)
dt.AddDef("项目内容", GetType(String), 200)
dt.AddDef("单位", GetType(String), 50)
dt.Build()
MainTable = Tables(sheetname)
' 读取Excel数据
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(sheetName)'定义ws为工作表
'从下向上查找最后一个行并得到其行号.
Dim FirstRow As Integer = ws.Range("E2000").End(MSExcel.XlDirection.xlup).Row
'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行
Dim Rg As MSExcel.Range = ws.UsedRange
Dim ary = rg.value
Dim bb2 As Integer = FirstRow 'Sheet2.Rows.Count
'填充数据
For n As Integer = 5 To bb2 '5代表从工作表第5行开始逐行遍历’
Dim ro As Row = Tables(sheetname).AddNew '新增一行’
For i As Integer = 1 To 7 '1代表从第一个列开始读取’
ro(i - 1) = ary(n, i) 'i + 2代表数据从第三列后开始填充’
Next
Next
End If
Next