-- 作者:cnsjroom
-- 发布时间:2022/9/23 15:42:00
-- excel表删除指定行与列,创建临时表,后遍历excel表行与列,将execl数据读取到临时表中
excel表删除指定行与列,创建临时表,后遍历excel表行与列,将execl数据读取到临时表中
代码是否还可以进一步简化,敬请老师们多多指导!
当前代码如下:【实现表中数据全部逐行逐列写入临时表】
Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "excel文件|*.xlsx; *.xls" \'设置筛选器 Dim dr As DataRow If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 Dim dtb As New DataTableBuilder(FileSys.GetName(dlg.FileName)) dtb.AddDef("A", Gettype(String),50) dtb.AddDef("B", Gettype(String),50) dtb.AddDef("C", Gettype(String),50) For ii As Integer = 1 To 50 dtb.AddDef("A" & ii, Gettype(Integer)) Next dtb.Build() MainTable=Tables(FileSys.GetName(dlg.FileName)) \'Tables(FileSys.GetName(dlg.FileName)).DataTable.DeleteFor("") Dim App As New MSExcel.Application try
\'这个部分以下根据个人表格情况,灵活选择是否使用,不需要就注释或删除\' Dim Book As New XLS.Book(dlg.FileName) \'定义一个Excel工作簿 Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表 Sheet.Rows.RemoveAt(26) \'在删除第26行 Sheet.Rows.RemoveAt(25) \'在删除第26行 For ii As Integer = 0 To 5 Sheet.Rows.RemoveAt(0) \'在删除第1-5行 Next For ii As Integer = 0 To 3 Sheet.Cols.RemoveAt(0) \'在最前面插入三列 Next Book.Save(dlg.FileName)
\'这个部分以上根据个人表格情况,灵活选择是否使用,不需要就注释或删除\'
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName) Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) \'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行 Dim FirstRow As Integer = Ws.Range("A3").End(MSExcel.XlDirection.xlDown).Row \'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行 Dim Rg As MSExcel.Range = Ws.UsedRange Dim ary = rg.value Dim Book2 As New XLS.Book(dlg.FileName) \'定义一个Excel工作簿 Dim Sheet2 As XLS.Sheet = Book2.Sheets(0) \'引用工作簿的第一个工作表 Dim bb2 As Integer=FirstRow \'Sheet2.Rows.Count Dim cc2 As Integer=Sheet2.cols.Count output.show(bb2 & "||||" & cc2) \'Dim Rg As MSExcel.Range = Ws.Range("A10")\'以这个指定的单元格为基准 \'Rg.EntireColumn.Delete(MSExcel.XlDirection.xlToLeft) \'右面的单元格左移 \'重点看这里,自己根据表格位置调整导入把--- For n As Integer = 2 To bb2 ‘2代表从第二行开始逐行遍历’ Dim ro As Row = Tables(FileSys.GetName(dlg.FileName)).AddNew ‘根据需要新增指定行,可遍历新增多行,也可以根据需要改变位置,只新增一行’ For i As Integer = 1 To cc2 ‘1代表从第一个列开始读取’ ro(i+2) = ary(n,i) ‘i+2代表数据从第三列后开始填充’ Next Next \'重点看这里,自己根据表格位置调整导入把--- MessageBox.Show("导入成功!","恭喜!") catch ex As exception msgbox(ex.message) MessageBox.Show("导入失败!","恭喜!") finally app.quit End try End If
运行效果如图:
此主题相关图片如下:12.png

有没有办法直接读取指定的某行和某列来读取值呢?
直接将红色部分代码更换如下:
For n As Integer = 2 To bb2 Dim ro As Row = Tables(FileSys.GetName(dlg.FileName)).AddNew \'For i As Integer = 1 To cc2 ro("A1") = ary(n,2) \'Next Next
运行效果如图:
此主题相关图片如下:123.png

如果是只想读取指定的一行中的某列来读取值呢?
直接将红色部分代码更换如下: Dim ro As Row = Tables(FileSys.GetName(dlg.FileName)).AddNew \'For n As Integer = 2 To bb2 \'For i As Integer = 1 To cc2 ro("A1") = ary(2,2) ‘新增一行 将A1字段的值更新为ary(2,2)’ \'Next \'Next
运行效果如图:
此主题相关图片如下:124.png

[此贴子已经被作者于2022/9/23 15:48:37编辑过]
|