2013-06-03 88 views
0

我已经使用一些代码来导入文本文件到使用ADO Excel中,如下图所示:复制文本忽略第一行

Sub ImportTextFile() 
    'Imports text file into Excel workbook using ADO. 
    'If the number of records exceeds 65536 then it splits it over more than one sheet. 

     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 (*.txt),*.txt", , "Please select text file...") 

     If strFullPath = "False" Then Exit Sub 'User pressed Cancel on the open file dialog 

     'This gives us a full path name e.g. C:\temp\folder\file.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, 3, 1, 1 
     While Not oRS.EOF 
      Sheets("Sheet1").Select 
      ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536 
      Range("A1").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Range(Selection, Selection.End(xlDown)).Select 
      Selection.Copy 
      Range("C1").Select 
      ActiveSheet.Paste 
      Range("E1").Select 
      ActiveSheet.Paste 
      . 
      . 
      . 
      Range("CW1").Select 
      ActiveSheet.Paste 
      Range("CY1").Select 
      ActiveSheet.Paste 

      Range("A1").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Range(Selection, Selection.End(xlDown)).Select 
      Selection.Copy 
      Sheets("Recorder Log").Select 
      Range("A9").Select 
      ActiveSheet.Paste 

      Range("C8").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Application.CutCopyMode = False 
      Selection.Copy 
      Range("C9").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Range(Selection, Selection.End(xlDown)).Select 
      ActiveSheet.Paste 

      Sheets("Sheet1").Select 
      Cells.Select 
      Selection.Delete Shift:=xlUp 
      Sheets("Recorder Log").Select 
      Range("C9").Select 
     Wend 

     oRS.Close 
     oConn.Close 

    End Sub 

我认为代码是完美,但随后工作注意到我导入的文件中的第一行文本没有被复制到Excel中。

是否有任何理由为什么会发生这种事,是有一个解决方案,以避免对预格式化用在开始一个空白行的文本文件?

在此先感谢。

CV

+0

什么是在您的原始文本文件中的第一行 - 是否有列标题或内部没有列标题? –

+0

没有列标题。 – CluelessVoid

+1

所以,试着改变这个:'HDR = Yes'到你的代码里面的'HDR = No' ... –

回答

2

您已设置,通过连接属性,HDR =是,其出类拔萃意味着第一行包含列名的标题。由于您没有标题栏,因此应该设置HDR =否

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=" & strFilePath & ";" & _ 
       "Extended Properties=""text;HDR=No;FMT=Delimited""" 
+0

非常感谢@KazJaw – CluelessVoid