ListView控件可以显示多列数据,与excel工作表单元格具有相似性。
如下图所示为Excel中的数据

现在要将Excel数据导入到ListView控件中,形成如下图所示的结果

可以使用如下的代码:
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (lpofn As OPENFILENAME) As Long
Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Function GetFileName() As String
Dim sOFN As OPENFILENAME
With sOFN
.lStructSize = Len(sOFN)
'设置打开文件对话框中的文件筛选字符串对
.lpstrFilter = "Excel文件(*.xl*)" & Chr(0) & "*.xl*" & Chr(0) & "Word文件(*.do*)" _
& Chr(0) & "*.do*" & Chr(0) & "PPT文件(*.pp*)" & Chr(0) & "*.pp*" & Chr(0) & "所有文件(*.*)" & Chr(0) & "*.*" _
& Chr(0) & Chr(0)
'设置文件完整路径和文件名的缓冲区
.lpstrFile = Space(1024)
'设置文件完整路径和文件名的最大字符数,一定要比lpstrFile参数指定的字符数多1,用于存储结尾Null字符。
.nMaxFile = 1025
End With
i = GetOpenFileName(sOFN)
If i <> 0 Then
With sOFN
sFileName = Trim(.lpstrFile)
GetFileName = Left(sFileName, Len(sFileName) - 1)
End With
Else
GetFileName = ""
End If
Debug.Print GetFileName, Len(GetFileName)
End Function
Sub QQ1722187970()
Const xlToLeft = -4159
Const xlUp = -4162
Dim oExcel
Dim oWB
Dim oWK
Dim oCH As ColumnHeader
Dim oLI As ListItem
Dim oLSI As ListSubItem
Dim sFileName As String
'选择要导入的excel文件
sFileName = GetFileName
If Len(sFileName) Then
Set oExcel = CreateObject("Excel.Application")
With oExcel
oExcel.Visible = True
Set oWB = .workbooks.open(sFileName)
Set oWK = oWB.worksheets(1)
With oWK
'读取总列数
iCol = .cells(1, 256).End(xlToLeft).Column
With ListView1
.View = lvwReport
'先创建列标题
For j = 1 To iCol
.ColumnHeaders.Add , , oWK.cells(1, j)
Next j
End With
For i = 2 To .range("a65536").End(xlUp).row
'先创建第一列项目
Set oLI = ListView1.ListItems.Add(, , oWK.cells(i, 1))
'后创建其它列项目
With oLI
For j = 2 To iCol
.ListSubItems.Add , , oWK.cells(i, j)
Next j
End With
Next i
End With
oWB.Close (False)
.quit
End With
Set oExcel = Nothing
End If
End Sub
上述代码首先使用API函数获取选中的文件的文件完整路径,然后用Excel打开后读取数据到ListView控件中。
上述代码即可在VB 6.0中使用,也可以在VBA中使用。


发表评论