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

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

在VBA中 – 与VB.NEt截然不同(所以我可能不在这里),你可以使用

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

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

要么

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

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

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

更改列名称或编号以符合您的需求(或以与End(xlLeft)最后一行相同的方式find它

这是我以前用过的一个例子。

 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 

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

使用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