0

我有一个带有 18 位数字列的模板,当输入最后一个数字将转换为零时。所以我将该列修改为文本列。我需要将 xls 转换为 csv,在转换时我正在验证列,如果数字长度小于 18,我将零填充到该数字。将其转换为 csv 后,数字将被修改为科学数字。有没有可能不将数字转换为科学数字。它在文本列中保持不变。提前致谢。

4

1 回答 1

0

我打算将此作为评论添加到上面的评论中,但该选项对我来说没有出现,所以我将其作为答案。

在第一点上,Excel 只允许您使用 15 个有效数字,这就是为什么您最初得到零的原因。所以是的,您必须将列格式化为文本以处理 18 位输入。不过,正如 Tim Williams 指出的那样,虽然格式决定了您保存的文件的内容(这就是您在写字板中打开文件时看到正确格式的原因),但在 Excel 中重新打开它时无济于事。

问题是 Excel 非常热衷于“帮助”您,以至于在大多数情况下,当您打开 .csv 文件时它不会显示文本导入向导。相反,它将直接打开文件,对内容格式做出最佳猜测,在您的情况下,尽管存在前导零,但它会错误地猜测。

解决此问题的一种方法是将文件另存为 .csv,但确保它具有不同的扩展名。我使用.cma。当您保存文件时,您将其另存为“MyFile.cma”,但您必须在“文件名”对话框中将该名称用双引号引起来,否则 Excel 会将其另存为 MyFile.cma.csv

当您打开 .cma(或类似的其他无法识别的扩展名)时,Excel 将显示文本导入向导,它允许您(如 Tim 建议的那样)指定您希望在打开文件时将列作为文本。这样它就不会转换为数字,更具体地说是科学数字。

另一个选项是使用 VBA 中的 OpenText 方法重新打开文件:

    Workbooks.OpenText FileName:= _
    "C:\Users\YourName\Documents\Data\YourFile.cma", _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, 
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
    Space:=False, Other:=False, 
    FieldInfo:=Array(Array(1, 2)), TrailingMinusNumbers:=True

这取决于您想要或需要投入多少精力来实现自动化。

于 2012-06-22T21:34:17.823 回答