0
我有一個Excel工作表和它的humongous ..大約像200000行需要處理。 我所要做的就是讀取它並使用DB2表上的查詢處理它們。我已經編寫了超過8小時處理5000行的程序。讀取excel行並同時處理它
有沒有一種方法可以讓我同時讀取excel並執行查詢。我希望他們獨立於這個過程。我不能使用Parallel.for作爲閱讀並創建這麼多的線程實例沒有好處。任何管道和隊列都沒用。這是一種使用dom方法,它不讀取一行,它讀取一個字符串。如果行上有一個空值,它將執行該行並引發一個空異常。我和後臺工作人員以及TPL很好。任何想法或代碼將不勝感激。無DLL可以使用除了從OPENXML
理想的情況下,我不希望添加到陣列,,我想在2個差異變量,讀取時對其進行處理..
- 讀取一行(只有2列,忽略其他的cols
- 創建一個線程來執行行和並行,執行讀取行。
- 合併成一個單一的表。
- 顯示效果..聽起來簡單,但也有挑戰。
。
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