2011-10-05 35 views
1

我已經知道的基本程序如何閱讀使用VB.NET,但我的.xls文件的特定細胞無法弄清楚如何自動從所有數據這樣的文件。VB.NET - 讀一個Excel的全部內容文件

基本上,我得到的數據是這樣的:

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 

在這種情況下,我知道會有前10行的列A,B和C,但內容會是什麼我如果我有一個巨大的文件,其大小和內容甚至可能會不時變化,我必須這樣做嗎?我知道,還有一個屬性ws.rows.count但這總是返回大值60000一樣,即使只有幾行被佔用。

所以基本上,我通過一個Excel與該行中訪問每個細胞的可能性文件的所有使用的行尋找一種簡單的方法來循環。

回答

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 
+0

此方法是由該[EXCEL先生樣品xl2003]覆蓋(http://www.mrexcel.com/td0058.html)。隨着XL2007/10的特定列示例更多行今天將被用作'LastRowColA =細胞(Rows.Count,「A」)。完(xlUp).Row' – brettdj

0

仍然在VBA中,我們經常使用End語句這種Ø ˚F問題:

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

更改列的名稱或編號,以滿足您的需求(或找到它以同樣的方式在最後一行用End(xlLeft)

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 
-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                 
+0

所提供的代碼根本不起作用 – Dima

0

昏暗aDataTemp = xl.Worksheets(sSheetName).UsedRange.value