将CSV导入为文本Excel VBA

时间:2018-02-19 14:39:17

标签: excel vba excel-vba

我正在导入包含20位数字的CSV文件(例如12345678901234567890123)。由于每个单元格中的Excel only supports 15 digits,导入数据的数字为123456789012345000000,这是不正确的。当作为字符串导入时,它会自动采用指数形式 - 类似于1.23456E + 23,这也是不正确且很难(如果不是不可能)转换为原始形式。到目前为止,我已尝试将CS​​V文件中的双引号括起来并与xlTextQualifierDoubleQuote标志一起使用.NumberFormat =“0”,但两种解决方案都不起作用。在这一点上,我已经厌倦了Excel假设单元格值类型,我只想要一切都是文本格式。这有可能吗?

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

4 个答案:

答案 0 :(得分:2)

修改

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

.TextFileColumnDataTypes = Array(xlTextFormat)

用法可以在official documentation中找到@Martin在评论中链接。

在将数字放入单元格之前使用.NumberFormat = "@"

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

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

您可以在@ fr13d。

中看到更多选项或大约在此堆栈溢出answer

答案 1 :(得分:1)

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

如果是这样,Excel会自动将单元格解释为具有科学数字,这就是您看到数字的原因" 12345678901234567890123"作为指数。

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

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

" =""数据在这里"""

答案 2 :(得分:0)

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

" ="" 12345678901234567890123"""" ="" 12345678901234567890123"" "

答案 3 :(得分:0)

如果这是一次性操作,您可以将文件从file.csv重命名为file.txt。 如果现在通过openfile-dialog打开file.txt,Excel将以textconverting-assistent启动。 在那里,您可以指定每列的格式。

祝你好运