rvercesi
Member
- Joined
- Oct 16, 2008
- Messages
- 10
- Programming Experience
- 5-10
Hi guys
Still around importing Excel Files to DataGridView.
Since my main problem was to keep color formating, I got to use the following function:
I got around several issues regarding localization and excel versions. But now I am stuck in trying to put this SUB in a Thread. No so much by putting this AS IT IS but because I want to pass several arguments to filter the XLS before loading it to the DataGridView.
I can get it to work (but doesn't seems multithreading as it freezes my app) using:
And calling it like this:
But again, as I mentioned before, it freezes my app while loading the XLS on to the DataGridView (therefore shadowing the purpose of using threads) and I can not get it to work when I pass arguments to the SUB.
Need help urgently on this one. Than you.
Still around importing Excel Files to DataGridView.
Since my main problem was to keep color formating, I got to use the following function:
VB.NET:
Private Sub LoadXLSFile()
Dim xlApp As New Microsoft.Office.Interop.Excel.Application
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
Dim xlWB As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Open(lblSelectedXLSFile.Text)
Dim xlWS As Microsoft.Office.Interop.Excel.Worksheet = xlWB.Worksheets("Sheet1")
dgvXLS.RowCount = xlWS.UsedRange.Rows.Count - 1
dgvXLS.ColumnCount = xlWS.UsedRange.Columns.Count
Try
For c As Integer = 1 To xlWS.UsedRange.Columns.Count
dgvXLS.Columns(c - 1).HeaderText = xlWS.UsedRange.Cells(1, c).Value
Next
For r As Integer = 2 To xlWS.UsedRange.Rows.Count
For c As Integer = 1 To xlWS.UsedRange.Columns.Count
With dgvXLS(c - 1, r - 2)
.Value = xlWS.UsedRange.Cells(r, c).Value
.Style.BackColor = ColorTranslator.FromOle(xlWS.UsedRange.Cells(r, c).Interior.Color)
End With
Next
'progressBar1.Value = r * 100 / (xlWS.UsedRange.Rows.Count - 2)
Next
MsgBox("XLS LOADED SUCCESSFULY", MsgBoxStyle.Information)
Catch ex As Exception
MsgBox("ERROR LOADING XLS: " & vbCrLf & ex.Message, MsgBoxStyle.Critical)
Finally
xlWS = Nothing
xlWB.Close(False)
xlWB = Nothing
xlApp.Quit()
xlApp = Nothing
End Try
End Sub
I got around several issues regarding localization and excel versions. But now I am stuck in trying to put this SUB in a Thread. No so much by putting this AS IT IS but because I want to pass several arguments to filter the XLS before loading it to the DataGridView.
I can get it to work (but doesn't seems multithreading as it freezes my app) using:
VB.NET:
Delegate Sub dgvDelegate()
Private Sub dgvThreadMain()
If Me.InvokeRequired Then
Me.Invoke(New dgvDelegate(AddressOf LoadXLSFile))
End If
End Sub
And calling it like this:
VB.NET:
Dim dgvThread As New Threading.Thread(AddressOf dgvThreadMain)
dgvThread.Priority = ThreadPriority.Normal
dgvThread.IsBackground = True
dgvThread.Start()
But again, as I mentioned before, it freezes my app while loading the XLS on to the DataGridView (therefore shadowing the purpose of using threads) and I can not get it to work when I pass arguments to the SUB.
Need help urgently on this one. Than you.