【IT168 技术资源】
将整个Excel导入程序的代码如下,在VB.NET 2005下已经通过测试:
'导入Excel数据
Private Sub mImport_Excel_Data(ByVal p_FileName As String, _
ByVal p_First_Row As Integer, _
ByVal p_First_Col As Integer, _
ByVal p_Total_Cols As Integer, _
ByVal p_DataGrid As DataGridView)
'p_FileName 导入数据的文件名
'p_First_Row 导入的起始行
'p_First_Col 导入的起始列
'p_Total_Cols 欲导入的总列数
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim I As Integer
Dim J As Integer
Dim intRows As Integer = 0
Dim strRange As String = ""
xlApp = New Excel.Application
xlBook = xlApp.Workbooks.Add
xlBook = xlApp.Workbooks.Open(p_FileName)
'xlSheet = xlBook.Worksheets("Sheet1")
xlSheet = xlBook.ActiveSheet
I = 0
intRows = 0
'得到总的有效行数
'第1列为序号(凡是有序号的都视为有效列)
While Not (CInt(Val(Trim(xlSheet.Range(xlSheet.Cells(p_First_Row + 1 + intRows, 1), xlSheet.Cells(p_First_Row + 1 + intRows, 1)).Text))) = 0)
intRows = intRows + 1
End While
If intRows = 0 Then Return
dgView1.Rows.Clear()
With tspProgress
.Minimum = 0
.Maximum = p_First_Row + intRows + 2
End With
With xlSheet
For I = p_First_Row To p_First_Row + intRows
tspProgress.Value = I
p_DataGrid.Rows.Add()
p_DataGrid.Rows(I - p_First_Row).Cells(0).Value = I - p_First_Row + 1
For J = p_First_Col To p_Total_Cols
'strRange = Chr(64 + J) & I
'p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(strRange, strRange).Text
p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(.Cells(I, J), .Cells(I, J)).Text
Next J
Next I
End With
tspProgress.Value = 0
xlSheet = Nothing
xlBook.Close()
xlApp.Quit()
xlBook = Nothing
xlApp = Nothing
End Sub
以上看到,可以采用2种方式得到Excel单元格的数据:
[1]
strRange = Chr(64 + J) & I
p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(strRange, strRange).Text
[2]
p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(.Cells(I, J), .Cells(I, J)).Text