【问题标题】:VB.NET - Reading ENTIRE content of an excel fileVB.NET - 读取 excel 文件的全部内容
【发布时间】:2011-12-01 07:39:45
【问题描述】:

我已经知道如何使用 VB.NET 读取 .xls 文件的特定单元格的基本过程,但我不知道如何自动从此类文件中获取所有数据。

基本上,我正在获取这样的数据:

Dim xlApp As Excel.Application
Dim wb As Workbook
Dim ws As Worksheet
xlApp = New Excel.Application
wb = xlApp.Workbooks.Open("myfile.xls")
ws = wb.Worksheets("worksheet1")
For Each cell In ws.Range("A1", "C10")
     Console.WriteLine(cell.value)
Next

在这种情况下,我知道 A、B 和 C 列的前 10 行中会有内容,但是如果我有一个巨大的文档,其大小和内容甚至可能随时更改,我该怎么办?时间?我知道还有一个属性 ws.rows.count 但这总是返回一个很大的值,比如 60000,即使只有几行被占用。

所以基本上,我正在寻找一种简单的方法来遍历 Excel 文件中所有已使用的行,并可以访问该行中的每个单元格。

【问题讨论】:

    标签: vb.net visual-studio excel xls


    【解决方案1】:

    在 VBA 中 - 与 VB.NEt 不同(所以我可能在这里偏离目标)您可以使用

    ActiveSheet.UsedRange
    MsgBox ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    

    (根据需要“重置”UsedRange 的第一行,SpecialCells(xlCellTypeLastCell) 通常会给出比实际存在更大的范围),或者更常见

    或

    Dim rng1 As Range
    Set rng1 = ActiveSheet.Cells.Find("*", [a1], xlValues, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then MsgBox rng1.Row
    

    【讨论】:

    • Mr Excel sample for xl2003 涵盖了这种方法。随着 Xl2007/10 中的更多行,特定列示例今天将用作 LastRowColA = Cells(Rows.Count,"A").End(xlUp).Row
    【解决方案2】:

    在 VBA 中,我们经常使用End 语句来解决此类问题:

    ws.Cells(Rows.Count, "A").End(xlUp).Row
    

    更改列名称或编号以满足您的需要(或以与 End(xlLeft) 的最后一行相同的方式找到它

    【讨论】:

      【解决方案3】:

      这是我过去使用的一个示例。

      Imports Excel = Microsoft.Office.Interop.Excel
      Public Class Form1
          Private Sub Button1_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button1.Click
      
              Dim xlApp As Excel.Application
              Dim xlWorkBook As Excel.Workbook
              Dim xlWorkSheet As Excel.Worksheet
      
              xlApp = New Excel.ApplicationClass
              xlWorkBook = xlApp.Workbooks.Open("c:\test1.xlsx")
              xlWorkSheet = xlWorkBook.Worksheets("sheet1")
              'display the cells value B2
              MsgBox(xlWorkSheet.Cells(2, 2).value)
              'edit the cell with new value
              xlWorkSheet.Cells(2, 2) = "http://vb.net-informations.com"
              xlWorkBook.Close()
              xlApp.Quit()
      
              releaseObject(xlApp)
              releaseObject(xlWorkBook)
              releaseObject(xlWorkSheet)
      
          End Sub
      
          Private Sub releaseObject(ByVal obj As Object)
              Try
                  System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
                  obj = Nothing
              Catch ex As Exception
                  obj = Nothing
              Finally
                  GC.Collect()
              End Try
          End Sub
      
      End Class
      

      【讨论】:

        【解决方案4】:

        Dim aDataTemp = xl.Worksheets(sSheetName).UsedRange.value

        【讨论】:

          【解决方案5】:

          使用 Spire.XLS 很容易读取所有可用的单元格,例如:

          Dim workbook As New Workbook
          workbook.LoadFromFile("your-excel-file.xls")
          Dim worksheet As Worksheet = workbook.Worksheets(0)
          Dim range As CellRange = worksheet.AllocatedRange
          Console.WriteLine("LastRow Index: {0}, LastColumn Index:{1}", range.LastRow, range.LastColumn)
          For Each cell As CellRange In range.Cells
              If cell.IsBlank Then
                  Continue For
              End If
              Console.WriteLine("{0} = {1}", cell.RangeAddressLocal, cell.Value2)    
          Next                                                                   
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多