2017-08-27 45 views
0

我一直在試圖編寫一個可以從Excel文件中讀取數據的程序。經過幾個小時的嘗試後,終於開始工作了。但是,我注意到它的工作非常緩慢,特別是涉及到大量的行和列時。嘗試在我的其他電腦上檢查,也許這是一個PC問題,但不幸的是它對其他人來說確實很慢。VB.Net - 緩慢讀取Excel文件中的數據

有什麼我需要改變或刪除或添加?

這裏是我的代碼:

Public Sub LoopExcel() 
    Dim colfrom As Integer = Asc(txtColFrom.Text) 
    Dim colto As Integer = Asc(txtColTo.Text) 

    Dim rowfrom As Integer = Integer.Parse(txtRowFrom.Text) 
    Dim rowto As Integer = Integer.Parse(txtRowTo.Text) 

    For rowindex = rowfrom To rowto 
     For colindex = colfrom To colto 
      Dim str As String = OpenExcelGetData(txtFileName.Text, rowindex, Convert.ToChar(colindex)).ToString 
      Console.WriteLine(str) 
     Next 
    Next 
End Sub 

Public Function OpenExcelGetData(ByVal fileNameAndPath As String, ByVal rowIndex As Integer, ByVal columnIndex As String) As Object 
    Dim oExcelApp As New Excel.ApplicationClass 
    Dim oExcelBook As Excel.Workbook 
    Dim oExcelSheet As Excel.Worksheet 
    Dim sheetNumber As Integer = 1 '1-based array 

    Dim oData As Object = Nothing 

    Try 
     oExcelBook = oExcelApp.Workbooks.Open(fileNameAndPath) 
     oExcelSheet = CType(oExcelBook.Worksheets(sheetNumber), Excel.Worksheet) 

     'Read data 

     Dim excelRange As String = columnIndex & rowIndex.ToString() 

     oData = oExcelSheet.Range(excelRange).Value 

    Catch exp As COMException 
     MessageBox.Show(exp.Message) 

    Catch exp As Exception 
     MessageBox.Show(exp.Message) 

    End Try 

    Return oData 
End Function 
+1

也許你應該發佈你的問題[這裏](https://codereview.stackexchange.com/),它是一個專門的代碼審查網站。 – Mrig

+0

[這裏](https://stackoverflow.com/a/16051/468973)是使用自動化的替代方案。 – Magnus

回答

1

你應該考慮的是COM技術本身是緩慢的。 您需要儘量減少方法調用的次數,逐個單元格會非常慢,也許按範圍。

你也可能會想到一個不涉及COM的不同解決方案。

+0

有沒有一種方法可以在不循環每列的情況下從一個特定行讀取所有數據? –

+0

嘗試使用oExcelSheet.Range讀取範圍,而不是單元格引用。 –

+0

我該怎麼做?這就是我想要做的。 –