You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过VBA删除CSV指定行 或将CSV导入Excel的Data工作表

VBA处理CSV需求实现方案

1. 直接删除CSV中指定行的实现方案

完全可以直接通过VBA修改CSV文件删除符合条件的行,无需导入Excel。实现逻辑为:先读取CSV表头确定pipeline_point_code字段的列索引,再逐行读取原CSV内容,跳过字段值为30000001PC的行,将剩余内容写入临时文件,最后用临时文件覆盖原CSV即可。
你可以把以下代码添加到原有代码的End Sub之前即可生效:

' --------------- 直接删除CSV中pipeline_point_code为30000001PC的行 ---------------
Dim fso As Object, tsIn As Object, tsOut As Object
Dim header As Variant, colIndex As Integer
Dim lineContent As String, lineArr As Variant
Dim tempFile As String

' 创建文件系统对象
Set fso = CreateObject("Scripting.FileSystemObject")
tempFile = Path1 & "temp_csv_file.csv"

' 打开原CSV读取,创建临时文件写入
Set tsIn = fso.OpenTextFile(File_Name1, 1, False, -2) ' -2对应系统默认编码,中文乱码可改成-1(UTF-16)或者65001(UTF-8)
Set tsOut = fso.CreateTextFile(tempFile, True, False)

' 读取表头确定pipeline_point_code的列索引
If Not tsIn.AtEndOfStream Then
    header = Split(tsIn.ReadLine, ",")
    For i = LBound(header) To UBound(header)
        If Trim(header(i)) = "pipeline_point_code" Then
            colIndex = i
            Exit For
        End If
    Next
    ' 写入表头到临时文件
    tsOut.WriteLine Join(header, ",")
End If

' 逐行处理内容
Do While Not tsIn.AtEndOfStream
    lineContent = tsIn.ReadLine
    lineArr = Split(lineContent, ",")
    ' 跳过符合删除条件的行
    If Trim(lineArr(colIndex)) <> "30000001PC" Then
        tsOut.WriteLine lineContent
    End If
Loop

' 关闭文件流
tsIn.Close
tsOut.Close

' 用临时文件覆盖原CSV,删除临时文件
fso.DeleteFile File_Name1
fso.MoveFile tempFile, File_Name1
Set fso = Nothing

2. 将CSV导入到"Data"工作表的实现方案

如果你需要先把CSV内容导入Excel处理,可以使用以下代码,同样添加到原有代码的End Sub之前即可:

' --------------- 将CSV内容导入Data工作表 ---------------
Dim ws As Worksheet
Dim importQry As QueryTable

' 指定Data工作表,不存在的话会自动创建
On Error Resume Next
Set ws = ThisWorkbook.Worksheets("Data")
If Err.Number <> 0 Then
    Set ws = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    ws.Name = "Data"
End If
On Error GoTo 0

' 清空原有内容
ws.Cells.Clear

' 导入CSV文件
Set importQry = ws.QueryTables.Add(Connection:="TEXT;" & File_Name1, Destination:=ws.Range("A1"))
With importQry
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True ' CSV用逗号分隔
    .TextFileColumnDataTypes = Array(xlTextFormat) ' 所有列按文本格式导入避免格式错乱
    .Refresh BackgroundQuery:=False
End With

' 清理查询对象
importQry.Delete
Set importQry = Nothing

注意:如果CSV有中文乱码问题,可以在导入代码的With importQry块中添加一行.TextFilePlatform = 65001指定为UTF-8编码,或者改为936对应GBK编码。

内容的提问来源于stack exchange,提问作者WorkerGuy21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:27:04