我已经知道如何使用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文件行,并可以访问该行中的每个单元格。
答案 0 :(得分:1)
- 与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