以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  excel表删除指定行与列,创建临时表,后遍历excel表行与列,将execl数据读取到临时表中  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=180019)

--  作者: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编辑过]

--  作者:有点蓝
--  发布时间:2022/9/23 16:50:00
--  
Dim Rg As MSExcel.Range = Ws.UsedRange        
Dim ary = rg.value

这个ary就是一个对应execl数据的二维数组,哪行哪列自己根据下标取值即可。

数组索引从0开始,ary(行号,列号)

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看