2014-02-27 56 views
0

我有一個Excel工作表和它的humongous ..大約像200000行需要處理。 我所要做的就是讀取它並使用DB2表上的查詢處理它們。我已經編寫了超過8小時處理5000行的程序。讀取excel行並同時處理它

有沒有一種方法可以讓我同時讀取excel並執行查詢。我希望他們獨立於這個過程。我不能使用Parallel.for作爲閱讀並創建這麼多的線程實例沒有好處。任何管道和隊列都沒用。這是一種使用dom方法,它不讀取一行,它讀取一個字符串。如果行上有一個空值,它將執行該行並引發一個空異常。我和後臺工作人員以及TPL很好。任何想法或代碼將不勝感激。無DLL可以使用除了從OPENXML

理想的情況下,我不希望添加到陣列,,我想在2個差異變量,讀取時對其進行處理..

  1. 讀取一行(只有2列,忽略其他的cols
  2. 創建一個線程來執行行和並行,執行讀取行。
  3. 合併成一個單一的表。
  4. 顯示效果..聽起來簡單,但也有挑戰。

Try 
    Using spreadsheetDocument As SpreadsheetDocument =  spreadsheetDocument.Open(fileName, False) 

     Dim workbookPart As WorkbookPart = spreadsheetDocument.WorkbookPart 
     Dim worksheetPart As WorksheetPart = workbookPart.WorksheetParts.First() 
     Dim sheetData As SheetData = worksheetPart.Worksheet.Elements(Of SheetData)().First() 
     For Each r As Row In sheetData.Elements(Of Row)() 
      For Each c As Cell In r.Elements(Of Cell)() 
       Dim text As String 
       Try 
        text = c.CellValue.Text.ToString 
        Debug.Print(text.ToString) 
        If text IsNot Nothing AndAlso Trim(text).Length > 0 Then 
         Arr.Add(text.ToString) 
        End If 
        text = Nothing 
        j += 1 
       Catch 
       End Try 
      Next 
      text = Nothing 
     Next 
    End Using 
Catch ex As Exception 
    MsgBox("Exception caught: " + ex.Message) 
    Debug.Print(ex.Message.ToString) 
    End 
End Try 
myArr = CType(Arr.ToArray(GetType(String)), String()) 

這是其將數據分成2個參數

For i As Integer = 2 To myArr.Count - 1 Step 2 
    If i And 1 Then 
     i = i - 1 
    Else 
     dstr = DateTime.FromOADate(Double.Parse(myArr(i).ToString())).ToShortDateString() 
     'Debug.Print(dstr.ToString & "----->" & i.ToString & "TCID--->" & myArr(i + 1).ToString) 
     DQueue.Enqueue(DateTime.FromOADate(Double.Parse(myArr(i).ToString())).ToShortDateString()) 
     Tqueue.Enqueue((myArr(i + 1).ToString())) 
     TCArr.Add((myArr(i + 1).ToString())) 
     dc.Merge(ProcessQueryODBC(dstr, myArr(i + 1).ToString)) 

     If dc.Rows.Count > 0 Then 
      dt.Merge(dc) 
     Else 
      nFound.Merge(CreateDT(dstr, myArr(i + 1).ToString())) 
     End If 
    End If 
Next 

回答

0

代替打開通過ODBC一個DB連接的過程。您可以將數據導出爲CSV文件,然後讓DB2執行import

somestring = "import from "myfile.csv" of DEL ...." 
DoCmd.RunSQL somestring 
相關問題