VB.NET - 读取excel文件的整个内容

时间:2011-10-05 09:09:27

标签: vb.net visual-studio excel xls

我已经知道如何使用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文件行,并可以访问该行中的每个单元格。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

更改列名称或编号以满足您的需要(或使用与End(xlLeft)

的最后一行相同的方式查找

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

很容易使用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