vba 读取csv文件生成Excel文件

时间:2023-02-10 07:29:51
现在有csv文件:
 检索条件1:动物
 检索条件2:鸟类
 
检索结果:
  鸟名,种类,大小   
  猫头鹰 ,夜行,中等
  画眉 ,日行,小

由于检索结果的条数特别的多,用行赋值的话特别的满,想用块赋值,不知道读取csv该怎么读取
        DoEvents 'Windows
        StrMemory = MyTS.ReadLine        
        StrMemory = Replace(StrMemory, "&", vbLf)   
        StrMemory = Replace(StrMemory, Chr(44), vbTab)   
        StrHeader = Split(StrMemory, vbTab, -1, vbBinaryCompare)
        Worksheets(C_sSheetNm).Cells(iCnt - 1, 1).Value = StrHeader(0)   

1 个解决方案

#1


搜索schema.ini的用法。利用ADO进行格式化文本的读取,用sql做检索,整块赋值进Excel,速度比较快。
给你个例子:
'*****************************************************************
'功能:利用ADO格式化读取TxT文本文件到Excel中
'******************************************************************
Private Sub 按格式读取文本文件到Excel中(sTxt As String, sPath As String, sDelimited As String)
'    sTxt:文本文件名称,sPath:文件所在文件夹路径,sDelimited:分隔符
    Dim rst As Object
    Dim sCnn As String
    Dim Free As Long

    sTxt = "a.csv" '文本文件名称
    sPath = "H:\新建文件夹\" '文件所在文件夹路径
    Free = FreeFile
    Open sPath & "schema.ini" For Output As #Free '创建 schema.ini 文件

'schema.ini 文件说明
'Schema.ini用于提供文本文件中记录的构架信息,在读取文本文件时优先扫描该文件,并按此架构读取文本文件
'在Schema.ini文件中可以预置文件名称,标题,字段分隔符,字段性质等信息
'所以我们可以创建它 , 然后KILL它, 当然也可以不删
'Schema.ini用于提供文本文件中记录的构架信息。每个 Schema.ini 项都用于指定表的五个特征之一:
    '1 文本文件名
    '2 文件格式
    '3 字段名?字段长度?字段类型
    '4 字符集
    '5 特别数据类型转换
'具体举例如下
'  ColNameHeader=True 'txt文件的第一行是否包含字段名。包含为True,从第二行开始读起,False为否,从文件第一行开始读起
'  Format = TabDelimited       '是 文本文件 字段以 TAB分隔符
'  Format = CSVDelimited       '是 文本文件 字段以 CSV文件形式
'  Format = Delimited(*)       '是 文本文件 字段以 * 分隔,*可为其它字符,如|
'  Col1=Id Integer Width 4     'Id 是长度为 10 的整形字段
'  Col2=Name Text Width 10     'Name 是长度为 10 的文本字段
'  MaxScanRows = 0             '扫描整个文件
'  CharacterSet = ANSI         '指定字符集, CharacterSet 项有两个选择:ANSI | OEM
'  特别数据类型转换            '特别数据类型转换主要是定义比如日期?货币型数据如何转换或者如何显示的

    Print #Free, "[" & sTxt & "]"
    Print #Free, "ColNameHeader = False"
    Print #Free, "Format = CSVDelimited"
    Print #Free, "MaxScanRows = 0"
    Close #Free

    sCnn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=" & sPath & "\;Persist Security Info=False"
'也可以用下面这一句
'sCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & ";Extended Properties=Text;"

    sSql = "SELECT * FROM " & sTxt
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open sSql, sCnn, 0, 1, 1
    If Not rst.EOF Then
        Sheet3.Cells.ClearContents: Sheet3.Range("A1").CopyFromRecordset rst
    End If
    rst.Close
    Set rst = Nothing

    Kill sPath & "schema.ini"
End Sub

Public Sub Read_Txt()
    按格式读取文本文件到Excel中 "a.csv", "H:\新建文件夹\", "CSVDelimited"
End Sub

#1


搜索schema.ini的用法。利用ADO进行格式化文本的读取,用sql做检索,整块赋值进Excel,速度比较快。
给你个例子:
'*****************************************************************
'功能:利用ADO格式化读取TxT文本文件到Excel中
'******************************************************************
Private Sub 按格式读取文本文件到Excel中(sTxt As String, sPath As String, sDelimited As String)
'    sTxt:文本文件名称,sPath:文件所在文件夹路径,sDelimited:分隔符
    Dim rst As Object
    Dim sCnn As String
    Dim Free As Long

    sTxt = "a.csv" '文本文件名称
    sPath = "H:\新建文件夹\" '文件所在文件夹路径
    Free = FreeFile
    Open sPath & "schema.ini" For Output As #Free '创建 schema.ini 文件

'schema.ini 文件说明
'Schema.ini用于提供文本文件中记录的构架信息,在读取文本文件时优先扫描该文件,并按此架构读取文本文件
'在Schema.ini文件中可以预置文件名称,标题,字段分隔符,字段性质等信息
'所以我们可以创建它 , 然后KILL它, 当然也可以不删
'Schema.ini用于提供文本文件中记录的构架信息。每个 Schema.ini 项都用于指定表的五个特征之一:
    '1 文本文件名
    '2 文件格式
    '3 字段名?字段长度?字段类型
    '4 字符集
    '5 特别数据类型转换
'具体举例如下
'  ColNameHeader=True 'txt文件的第一行是否包含字段名。包含为True,从第二行开始读起,False为否,从文件第一行开始读起
'  Format = TabDelimited       '是 文本文件 字段以 TAB分隔符
'  Format = CSVDelimited       '是 文本文件 字段以 CSV文件形式
'  Format = Delimited(*)       '是 文本文件 字段以 * 分隔,*可为其它字符,如|
'  Col1=Id Integer Width 4     'Id 是长度为 10 的整形字段
'  Col2=Name Text Width 10     'Name 是长度为 10 的文本字段
'  MaxScanRows = 0             '扫描整个文件
'  CharacterSet = ANSI         '指定字符集, CharacterSet 项有两个选择:ANSI | OEM
'  特别数据类型转换            '特别数据类型转换主要是定义比如日期?货币型数据如何转换或者如何显示的

    Print #Free, "[" & sTxt & "]"
    Print #Free, "ColNameHeader = False"
    Print #Free, "Format = CSVDelimited"
    Print #Free, "MaxScanRows = 0"
    Close #Free

    sCnn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=" & sPath & "\;Persist Security Info=False"
'也可以用下面这一句
'sCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & ";Extended Properties=Text;"

    sSql = "SELECT * FROM " & sTxt
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open sSql, sCnn, 0, 1, 1
    If Not rst.EOF Then
        Sheet3.Cells.ClearContents: Sheet3.Range("A1").CopyFromRecordset rst
    End If
    rst.Close
    Set rst = Nothing

    Kill sPath & "schema.ini"
End Sub

Public Sub Read_Txt()
    按格式读取文本文件到Excel中 "a.csv", "H:\新建文件夹\", "CSVDelimited"
End Sub