如何将分段的CSV文件加载到Excel表单中?

CSV文件:

#3GMACRO,,,,,,,,,,,,,, ,,,,,,,,,,,,,, IMSI,IMEI,Date,Time,UMTS MACRO-UARFCNDL,UMTS MACRO-PrimaryScramblingCode,UMTS MACRO-CPICHTxPower,UMTS MACRO-PLMNCellId,UMTS MACRO- RNCId,UMTS MACRO-MCC,UMTS MACRO-MNC,UMTS MACRO - LAC,UMTS MACRO - RAC,UMTS MACRO - MaxUETxPower,UMTS MACRO - MeasuredRSCP 2.6275E+14,3.57539E+14,20100107,160000,10662,11,-99,268435456,0,0,0,1,0,0,-74 ,,,,,,,,,,,,,, #3GFEMTO,,,,,,,,,,,,,, ,,,,,,,,,,,,,, IMSI,IMEI,Date,Time,UMTS FEMTOS-UARFCNDL,UMTS FEMTOS-PrimaryScramblingCode,UMTS FEMTOS-CPICHTxPower,UMTS FEMTOS-PLMNCellId,UMTS FEMTOS-RNCId,UMTS FEMTOS-MCC,UMTS FEMTOS-MNC,UMTS FEMTOS-LAC,UMTS FEMTOS-RAC,UMTS FEMTOS-MaxUETxPower,UMTS FEMTOS- MeasuredRSCP 2.6275E+14,3.57539E+14,20100107,160000,10687,252,-24,61,0,610,3956,486,11,5,-102 ,,,,,,,,,,,,,, #2GMACRO,,,,,,,,,,,,,, ,,,,,,,,,,,,,, IMSI,IMEI,Date,Time,GSM MACRO_CellID,GSM MACRO-MCC,GSM MACRO-MNC,GSM MACRO-LAC,GSM MACRO-RAC,GSM MACRO-Max permitted UE Tx power (SIB3),GSM MACRO-Measure RSSI,,,, 2.6275E+14,3.57539E+14,20100107,160000,GSM_Cell_Id=1,2,3,4,5,6,7,,,, 

我想这个csv文件作为一个单独的部分加载到Excel表单中时,我只点击加载一次(即每个部分应该去在Excel中单独的工作表)

CSV文件包含部分名称,标题和数据

以下是CSv文件中的部分名称

3GMACRO

3GFEMTO

2GMACRO

以下是CSv文件中的标题名称IMSI,IMEI,date,时间,GSM MACRO_CellID,GSM MACRO-MCC,GSM MACRO-MNC ………等

加载CSV文件后,3个工作表应该有标题和数据。

请帮助我这样做。

提前致谢 替代文字

嗨,这是我试过的代码,但它不能完美的按需要。

 Sub loadData() 'Runtime error handling 'On Error Resume Next 'Unprotect the password protected sheet for loading csv data ActiveSheet.Unprotect Password:=pass 'Variable declaration Dim strFilePath As String, strFilename As String, strFullPath As String Dim lngCounter As Long Dim oConn As Object, oRS As Object, oFSObj As Object 'Get a text file name strFullPath = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...") 'MsgBox "stringfullpath" & strFullPath If strFullPath = "False" Then Exit Sub 'User pressed Cancel on the open file dialog 'This gives us a full path name eg C:tempfolderfile.txt 'We need to split this into path and file name Set oFSObj = CreateObject("SCRIPTING.FILESYSTEMOBJECT") strFilePath = oFSObj.GetFile(strFullPath).ParentFolder.Path strFilename = oFSObj.GetFile(strFullPath).Name 'Open an ADO connection to the folder specified Set oConn = CreateObject("ADODB.CONNECTION") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strFilePath & ";" & _ "Extended Properties=""text;HDR=Yes;FMT=Delimited""" Set oRS = CreateObject("ADODB.RECORDSET") 'Now actually open the text file and import into Excel 'oRS.Open "SELECT * FROM " & strFilename & " , oConn" oRS.Open "SELECT * FROM " & strFilename, oConn While Not oRS.EOF Sheets("Neighbour3GMacro").Range("A3").CopyFromRecordset oRS 'Sheets.Add Type:=Application.GetOpenFilename & " *.csv" Sheets("Neighbour3GFemto").Range("A2").CopyFromRecordset oRS Sheets("Neighbour2GMacro").Range("A2").CopyFromRecordset oRS Wend oRS.Close oConn.Close End Sub 

你可以使用Split函数来获取一个数组,并使用这个数组来填充一个Row。 这是一个简单的解决scheme。

您将需要将Sheet1Sheet2Sheet3更改为工作表名称,并且可能需要添加function来忽略标题行。 如果你有一个修复的ColumnCount,你也可以用一个整数variablesreplaceUbound函数。

 Sub loadData2() Dim strFullPath As String Dim oFSOBj As Object 'Scripting.FileSystemObject' Dim oFileStream As Object 'Scripting.TextStream' Dim targetSheet As Worksheet Dim iRow As Long Dim startRow As Long Dim startColumn As Integer Dim line As String 'Please insert Error Handling etc.' 'Get a text file name ' strFullPath = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...") If strFullPath = "False" Then Exit Sub 'User pressed Cancel on the open file dialog' Set oFSOBj = CreateObject("SCRIPTING.FILESYSTEMOBJECT") Set oFileStream = oFSOBj.GetFile(strFullPath).OpenAsTextStream(ForReading) Set targetSheet = Sheet1 iRow = 0 startRow = 3 startColumn = 1 While (Not oFileStream.AtEndOfStream) line = oFileStream.ReadLine If (Left(line, 1) = "#") Then iRow = 0 If (Left(line, 8) = "#3GMACRO") Then Set targetSheet = Sheet1 If (Left(line, 8) = "#3GFEMTO") Then Set targetSheet = Sheet2 If (Left(line, 8) = "#2GMACRO") Then Set targetSheet = Sheet3 ElseIf Trim(line) <> vbNullString Then 'Else Block: line has content' csline = Split(line, ",") targetSheet.Range(targetSheet.Cells(startRow + iRow, startColumn), targetSheet.Cells(startRow + iRow, startColumn + UBound(csline))).Value2 = csline iRow = iRow + 1 End If Wend oFileStream.Close Set oFileStream = Nothing Set oFSOBj = Nothing End Sub