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

使用Workbooks.OpenText读取CSV时保留原日期文本的问题咨询

解决VBA读取CSV时自动转换日期格式的问题

方法1:在Workbooks.OpenText中指定列数据类型为文本

Excel自动转换日期是因为它会识别内容格式并自动套用,解决核心是强制指定目标列为文本格式,通过FieldInfo参数实现:

示例代码

Dim readFile As String
readFile = "C:\你的文件路径\目标文件.csv"

Workbooks.OpenText _
    fileName:=readFile, _
    DataType:=xlDelimited, _
    Comma:=True, _
    FieldInfo:=Array(Array(2, xlTextFormat)) ' 假设日期在第2列,根据实际列数调整

参数说明

  • FieldInfo是一个二维数组,每个子数组格式为Array(列号, 格式代码):
    • 列号从1开始计数,对应CSV中的列顺序
    • xlTextFormat(或直接写数值2)表示强制将该列识别为文本,阻止Excel自动转换日期、数字等格式
  • 如果需要多列设为文本,依次添加子数组即可,比如Array(Array(1, xlTextFormat), Array(3, xlTextFormat))表示第1、3列为文本

方法2:用FileSystemObject读取纯文本后写入工作表

如果不确定日期所在列,或需要完全保留所有原始文本格式,可以直接读取CSV的纯文本内容,再手动拆分写入工作表:

示例代码

Dim fso As Object
Dim ts As Object
Dim lineText As String
Dim arrData As Variant
Dim ws As Worksheet
Dim rowNum As Integer

' 初始化文件对象
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("C:\你的文件路径\目标文件.csv", 1) ' 1 = 只读模式
Set ws = ThisWorkbook.Sheets.Add ' 新建工作表存储数据
rowNum = 1

' 先设置整列为文本格式,避免写入时自动转换
ws.Columns.NumberFormat = "@"

' 逐行读取并写入
Do While Not ts.AtEndOfStream
    lineText = ts.ReadLine
    arrData = Split(lineText, ",") ' 按逗号拆分每行内容
    ' 将拆分后的数组写入当前行
    ws.Cells(rowNum, 1).Resize(1, UBound(arrData) + 1).Value = arrData
    rowNum = rowNum + 1
Loop

' 清理对象
ts.Close
Set ts = Nothing
Set fso = Nothing

注意事项

  • 如果CSV中存在用引号包裹的含逗号字段(比如"张三,男",25),直接用Split会拆分错误,此时需要用正则表达式或专门的CSV解析逻辑处理
  • 这种方法完全绕过Excel的自动格式识别,能100%保留原始文本内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:40