将CSV作为文本导入Excel VBA

将CSV作为文本导入Excel VBA,vba,excel,Vba,Excel,我正在导入一个包含20位左右数字的CSV文件(例如123456789012134567890123)。由于每个单元格中都有Excel,因此以数字形式导入数据会导致类似12345678901234500000的错误。当作为字符串导入时,它会自动采用指数形式-类似于1.23456E+23,这也是不正确的,并且很难(如果不是不可能的话)转换为原始形式。到目前为止,我已经尝试在CSV文件中使用双引号将数字与标志一起包装,并使用=“0”,但这两种解决方案都不起作用。在这一点上,我已经厌倦了Excel假设单

我正在导入一个包含20位左右数字的CSV文件(例如123456789012134567890123)。由于每个单元格中都有Excel,因此以数字形式导入数据会导致类似12345678901234500000的错误。当作为字符串导入时,它会自动采用指数形式-类似于1.23456E+23,这也是不正确的,并且很难(如果不是不可能的话)转换为原始形式。到目前为止,我已经尝试在CSV文件中使用双引号将数字与标志一起包装,并使用=“0”,但这两种解决方案都不起作用。在这一点上,我已经厌倦了Excel假设单元格值类型,我只希望所有内容都是文本格式。这有可能吗

编辑:我正在使用[worksheet].QueryTables.Add导入CSV(这就是xlTextQualifierDoubleQuote标志所关联的内容)

编辑

评论中有助于解决问题的建议是使用:

.TextFileColumnDataTypes = Array(xlTextFormat)
这个用法可以在他的评论中的as@Martin链接中找到


在将数字放入单元格之前,请使用
.NumberFormat=“@”

这将阻止Excel对单元格格式进行假设

另一个选项可能是在值中预加/追加一个非数字字符,该值将被识别为文本,并且不会转换。非打印字符会很好,因为它不会改变显示值。一个空格字符
ASCII码(9),作为示例附加

您可以通过@fr13d在堆栈溢出中看到更多选项或近似值。

编辑

评论中有助于解决问题的建议是使用:

.TextFileColumnDataTypes = Array(xlTextFormat)
这个用法可以在他的评论中的as@Martin链接中找到


在将数字放入单元格之前,请使用
.NumberFormat=“@”

这将阻止Excel对单元格格式进行假设

另一个选项可能是在值中预加/追加一个非数字字符,该值将被识别为文本,并且不会转换。非打印字符会很好,因为它不会改变显示值。一个空格字符
ASCII码(9),作为示例附加


您可以通过@fr13d在此堆栈溢出中看到更多选项或近似值。

如果您使用此格式在CSV中写入数字,Excel会将其解释为文本:


“=”123456789012 34567890123”“,“=”123456789012 34567890123”“

如果您使用此格式在CSV中写入数字,Excel会将其解释为文本:


“=”123456789012 34567890123”“,“=”123456789012 34567890123”“

如果这是一次性操作,您可以将文件从file.csv重命名为file.txt。 如果现在通过openfile对话框打开file.txt,Excel将以textconverting Assistant开始。 您可以在其中指定每列的格式


致意

如果这是一次性操作,您可以将文件从file.csv重命名为file.txt。 如果现在通过openfile对话框打开file.txt,Excel将以textconverting Assistant开始。 您可以在其中指定每列的格式


致以最诚挚的问候

您使用的是未嵌入单元格类型的CSV吗

如果是这样,Excel将自动将单元格解释为具有科学数字,这就是为什么您将数字“123456789001234567890123”视为指数数字的原因

创建新的Excel工作簿并将所有单元格格式化为文本。然后粘贴数据

编辑:如果您可以控制数据,Excel将自动检测CSV字段的格式,除非CSV列采用以下格式:


“=”“此处的数据”“”

您使用的CSV中没有嵌入单元格类型吗

如果是这样,Excel将自动将单元格解释为具有科学数字,这就是为什么您将数字“123456789001234567890123”视为指数数字的原因

创建新的Excel工作簿并将所有单元格格式化为文本。然后粘贴数据

编辑:如果您可以控制数据,Excel将自动检测CSV字段的格式,除非CSV列采用以下格式:


“=”“Data Here”“”

您如何导入?数据,从文本中获取外部数据,并选择文本作为目标字段的格式。共享您用于导入文件的代码,您就有更多的机会找到解决方案。您如何导入?数据,获取外部数据,从文本中选择文本作为目标字段的格式。共享您用于导入文件的代码,您就有更多的机会找到解决方案。这不是一个选项,因为这样单元格中的值将为“=”123456789012 34567890123“,无法通过与123456789001234567890123匹配。Find此选项不是选项,因为这样单元格中的值将为”=“123456789001234567890123”“,无法通过.find将其与123456789001234567890123进行匹配。当导入带有.QueryTables的CSV文件时,此操作不知何故不起作用。Add@Martin,您是否尝试过使用query进行
.TextFileColumnDataTypes:=xlTextFormat
?好的,成功了。正确的用法形式是.TextFileColumnDataTypes=Array(xlTextFormat),如建议的那样。谢谢当导入带有.QueryTables的CSV文件时,这不知何故不起作用。Add@Martin,您是否尝试过使用query进行
.TextFileColumnDataTypes:=xlTextFormat
?好的,成功了。正确的用法形式是.TextFileColumnDataTypes=Array(xlTextFormat),如建议的那样。谢谢当您说“将所有单元格格式化为文本”时,您的意思是使用.NumberFormat=“@”吗?当您说“将所有单元格格式化为文本”时,您的意思是使用.NumberFormat=“@”吗?通过此选项,您可以在通过QueryTables导入时指定列的格式。TextFileColumnDataTypes=Array(xlTextFormat,COLUMN2,COLUMN3,COLUMN4,…)编辑:Miguel_Ryu更快:)使用此选项,您可以在通过QueryTa导入时指定列的格式