【问题标题】:Text import into Excel文本导入 Excel
【发布时间】:2021-06-24 10:14:30
【问题描述】:

我有这段代码可以帮助将文本文件导入 excel。它旨在成为 Excel 无法处理超过 15 个字符的数字的解决方法。

我正在尝试找出一种方法来将此代码 .TextFileColumnDataTypes = Array(1, 2, 1, 1, 1, 1) 更改为可以通过文件自动检查列是否包含数字 16 个字符的内容或更长,并自动将它们切换为文本值以保留其格式。

Sub Text_import()
Dim Ret

Ret = Application.GetOpenFilename("CSV Files (*.csv), *.csv")

If Ret <> False Then
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & Ret, Destination:=Range("$A$1"))

    .Name = "Sample"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 2, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False

    End With
End If

结束子

【问题讨论】:

  • 按照你的描述,你的方法行不通。如果长数字以数字格式导入 Excel,然后“切换回”为文本,则它们已经损坏。无法通过“返回”数字来恢复丢失的数字。因此,您必须严格以文本格式导入相关列。
  • 我们可以看看您正在导入的 .CSV 文件的示例吗?
  • 嗯,就是这样,如果它是一个标准文件,我可以指定哪些列应该被视为文本。例如,如果一个文件的订单 ID 为 16 位,共有 5 列,则可以使用 .TextFileColumnDataTypes = Array(1, 2, 1, 1, 1, 1)。但是,我想知道 vba 是否有可能在导入文件之前循环遍历列以检查其中是否有任何数字和超过 15 个字符。

标签: excel vba text import


【解决方案1】:

使用 ADO 读取 .CSV 文件。

    With CreateObject("ADODB.Stream")
    .Open
    .Charset = "UTF-8"
    .LoadFromFile ActiveWorkbook.Path & "\\tw_202103231726.txt"
    text = .ReadText(-1)
    .Close
    End With

那么您就有了一个文本变量,您可以根据需要使用 VBA 进行处理。

更新:

也许是这样 -

    For ii = 1 To Len(text) Step 1

    Select Case Mid(text, ii, 2)
    Case Chr(34) & Chr(58) ' double quote 34 / colon 58

            dqcPos = InStr(ii + 3, text, Chr(34) & Chr(44)) ' double quote and comma

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多