使用 TextFileColumnDataTypes 打开每列数据格式正确的 CSV 文件?

2024-03-30

我正在使用下面的 VBA 代码在 Excel 中打开 csv 文件(该代码模拟 Data\Text to Columns - 命令)。在代码中需要为属性指定一个数组文本文件列数据类型,它为 csv 文件中的每一列指定一个数据格式(2 = 文本格式)。

但是,由于我不知道 csv 文件将有多少列,因此我想为 csv 文件中的所有列指定格式 2(= 文本格式)。现在的问题是我只能指定固定数量的列的数据格式(在下面的示例中为 3 列)。

非常感谢任何解决该问题的帮助:)

=================================================

这是我正在使用的完整代码:


    With ThisWorkbook.Worksheets(1).QueryTables.Add(Connection:= _
        "TEXT;C:\test.csv", Destination _
        :=ThisWorkbook.Worksheets(1).Range("$A$1"))
        .name = "Query Table from Csv"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 2, 2)
        .TextFileDecimalSeparator = "."
        .TextFileThousandsSeparator = ","
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
        .Delete     
    End With

以下是一种无需在 Excel 中打开即可从关闭的 CSV 中查找列数的方法。

我假设如下。

1)您正在打开一个逗号分隔的文件。如果没有,那么您将必须适当修改代码

2)CSV 中的第 1 行有标题 (任何列中至少有 1 个标题)

尝试这个(我测试了它,但如果您遇到任何错误,请告诉我们:)

Option Explicit

Const ExlCsv As String = "C:\test.csv"

Sub Sample()
    Dim MyData As String, strData() As String, TempAr() As String
    Dim ArCol() As Long, i As Long

    '~~> Open the text file in one go
    Open ExlCsv For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)

    '~~> Check for any empty headers and replace ",," by ","
    Do While InStr(1, strData(0), ",,") > 0
        strData(0) = Replace(strData(0), ",,", ",")
    Loop

    '~~> Split the headers to find the number of columns
    TempAr() = Split(strData(0), ",")

    '~~> Create our Array for TEXT       
    ReDim ArCol(1 To UBound(TempAr))
    For i = 1 To UBound(TempAr)
        ArCol(i) = 2
    Next i

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & ExlCsv, Destination:=Range("$A$1") _
        )
        .Name = "Output"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = ArCol
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

EDIT

或者,这是一个更简单的方法(想知道为什么我之前没有想到它......)

Option Explicit

Const ExlCsv As String = "C:\test.csv"

Sub Sample()
    ActiveSheet.Cells.NumberFormat = "@"

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & ExlCsv, Destination:=Range("$A$1") _
        )
        .Name = "Output"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False

         '<~~ This doesn't make any difference anymore
        .TextFileColumnDataTypes = Array(2)

        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TextFileColumnDataTypes 打开每列数据格式正确的 CSV 文件? 的相关文章

  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • OpenArgs 为空问题

    我正在使用OpenArgs使用时发送值的参数DoCmd OpenForm DoCmd OpenForm frmSetOther acNormal acFormAdd acDialog value 然后我用Me OpenArgs在打开的表格内
  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • VBA根据单元格的值是否为零显示/隐藏行

    我有一个 Excel 工作表 我想根据另一个单元格中的值隐藏或取消隐藏某些行 简而言之 整个事情应该取决于单元格中的值C2 D2 E2 If C2 is blank我想rows 31 to 40被隐藏 如果是的话不为空 他们需要是visib
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • MS Access - 粘贴确认事件后

    当用户将记录直接粘贴到数据表子报表中时 是否可以在显示粘贴确认消息后捕获事件 我需要它能够在审计表中创建新记录时进行记录 通过捕获更新前 更新后和插入事件 我可以轻松创建已添加的记录集合 准备将详细信息插入审核日志 但是在所有这些事件触发后
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 如何在 scikit 中加载 CSV 数据并将其用于朴素贝叶斯分类

    尝试加载自定义数据以在 Scikit 中执行 NB 分类 需要帮助将示例数据加载到 Scikit 中 然后执行 NB 如何加载目标的分类值 使用相同的数据进行训练和测试 或使用完整的数据集进行测试 Sl No Member ID Membe
  • 将ADODB二进制流转换为字符串vba

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 在二维范围内查找匹配的公式

    我需要一个公式来查找二维范围内的值并返回匹配单元格的坐标或单元格地址 例如 R A B C 1 John Matt Pete 2 Sara Bret Chad 3 Lila Maya Cami 我想搜索范围A1 C3 for Chad并返回
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • Excel VBA - 添加自定义数字格式

    我有一个在 Excel 外部生成的文件 其中包含许多百分比 所有这些百分比都有一位小数 当导入到 Excel 中时 Excel 会在百分比中添加第二位小数 这似乎是 Excel 中百分比的某种默认格式 它只是添加了一个 0 我想将所有两位小
  • Excel:#CALC!使用 MAP 函数计算间隔重叠时出现错误(嵌套数组)

    我正在努力解决以下公式 它适用于某些情况 但不适用于所有情况 名字input有失败的数据集 得到一个 CALC 描述 嵌套数组 错误 LET input N1 0 0 N1 0 10 N1 10 20 names INDEX input 1
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street

随机推荐

  • MeanShift `fit` 与 `fit_predict` scikit learn

    Suppose X是数组的典型形式 给定代码 from sklearn cluster import MeanShift ms MeanShift bin seeding True cluster all False ms fit X 一旦
  • CSS 最小高度 100%,具有多个 div

    好的 我试图让页面显示 100 的视口高度 但问题是页面有多个并不总是嵌套的 div 我一直在浏览多个问题和其他网站 但找不到适合我需要的答案 我目前的布局如下 div class container div class header di
  • 如何将 java.util.logging 重定向到文件?

    我有一个使用外部库的java程序 主程序使用log4j记录其消息并且库使用java util logging 我的问题是来自外部库和主程序的日志消息混合在控制台中 我想重定向all将来自外部库的消息记录到文件中 我尝试这样做logging
  • 如何在 Mac OSX 10.6 上卸载 wxpython 2.8

    在继续之前 我的机器和已安装的软件包的一些详细信息 Mac OSX 版本 10 6 6 Python版本 Activestate Python 2 7 1 wxpython 版本 wxpython 2 8 使用Carbon API 因此仅限
  • ListView完全不如RecyclerView吗?

    因此 Vogella 似乎表明与 RecyclerView 相比 ListView 已完全被弃用 实际上并不是已弃用 而是在任何情况下 ListView 都是更好的选择 这是真的 公共软件书籍表明它的更新速度可能会更快 还有其他理由从现在开
  • Contentpresenter 和 ContentControl 中 FontSize 未继承的解决方法

    尝试创建可以托管其他控件的 UserControl 以下是相关代码
  • YANG:如何在没有键的情况下对嵌套列表配置数据进行建模

    我正在尝试为这个配置文件构建 YANG 模型 该文件具有没有键的列表 然而 由于 YANG 列表中密钥的必要性 我无法构建精确的 YANG 模型 有没有什么想法如何在 YANG 中表示没有键的列表列表 该文件包含acl 其中可以有很多acl
  • 分层数据库选择/插入语句 (SQL Server)

    我最近偶然发现一个问题 从一个表中选择关系详细信息并插入到另一个表中 我希望有人可以提供帮助 我有一个表结构如下 ID PK Name ParentID br 1 Myname 0 br 2 nametwo 1 br 3 namethree
  • 如何修复错误:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException:

    我在 Eclipse 中有一个项目 当我同步项目时 我导出到 gradle 项目并在 Android Studio 中打开 错误 java util concurrent ExecutionException com android ide
  • Rstudio服务器安装el Capitan

    大约一年前 我曾经在我的 Mac 上运行 rstudio 服务器 不过我用的不多所以就删掉了 但是 现在我需要重新设置它 与此同时 我已更改为 el Capitan 以及有关的说明https iangow wordpress com 201
  • 将部分日期存储在数据库中

    我想将部分日期存储在关系数据库 MySQL PostgreSQL 等 中 例如 输入可能只是年份 2013 年和月 2013 08 或年 月 日 2013 08 29 我不能只使用普通的 DATE 类型 因为年份将扩展到 2013 01 0
  • 如何配置 Visual Studio 2017 来运行 Gstreamer 教程?

    我使用的是 Windows 10 我无法配置 Visual Studio 2017 来运行基本的 Gstreamer 教程 我收到诸如 无法打开 gst gst h 之类的错误 我正在使用 gstreamer 1 0 请帮忙 朋友你好 首先
  • XML 文档中需要转义哪些字符?

    XML 文档中必须转义哪些字符 或者在哪里可以找到这样的列表 如果您使用适当的类或库 他们将为您进行转义 许多 XML 问题都是由字符串连接引起的 XML 转义字符 只有五个 quot apos lt lt gt gt amp 转义字符取决
  • 如何判断 Windows 用于启动哪个磁盘

    我需要找到一种方法来以编程方式确定 Windows 使用哪个磁盘驱动器启动 换句话说 我需要一种从 Windows 中确定 BIOS 使用哪个驱动器来启动整个系统的方法 Windows 是否公开了一个接口来发现这一点 鉴于 Windows
  • C# 中的解析器 FxCop 结果 Xml 文件

    我以编程方式使用VS2010和Fxcop 10 0 fxcopcmd exe 来生成fxcop分析结果 xml文件 我想要解析器 xml 文件来获取 fxcop 分析结果 在java语言中我发现了这个 http grepcode com f
  • 使用react-router-relay类型增强react-router模块

    默认的react router是这样使用的 import as React from react import Router Route hashHistory from react router const routing
  • Flutter WebView 插件 - 如何处理本地存储变量

    背景 我正在开发一个移动应用程序 其中使用 WebViewScaffold 加载在线目录 此特定目录提供初次访问时的导游服务 问题 每次我导航到目录 WebView 时 游览都会从头开始 这会冻结用户 直到游览完成 我怎样才能避免这种情况发
  • 按变量将 Dunnett 检验中的 P 值提取到表中

    我有一个包含 25 列的列表 我正在通过 Dunnett 测试按组 4 个级别 对其进行测试 我能够使用sapply函数让 Dunnett 按组对所有列起作用 但在将 p 值拉入表中时遇到一些问题 下面是我尝试使用 iris 数据集执行的操
  • 使用 Android Google Maps API 显示热图图层

    我正在 Android 中做一个项目 其中我给出了一个地理点列表 纬度 经度 每个点都有一个关联的海拔 高度 值 我的任务是根据点的高度值创建具有不同颜色的给定地图的热图 有人知道现有的图书馆可以做同样的事情吗 或者 如果有人能够指导如何实
  • 使用 TextFileColumnDataTypes 打开每列数据格式正确的 CSV 文件?

    我正在使用下面的 VBA 代码在 Excel 中打开 csv 文件 该代码模拟 Data Text to Columns 命令 在代码中需要为属性指定一个数组文本文件列数据类型 它为 csv 文件中的每一列指定一个数据格式 2 文本格式 但