我有一个带有18位数字列的模板,当输入时,最后一个数字将转换为零。所以我将列修改为文本列。我需要将xls转换为csv,当转换我正在验证列时,如果数字长度小于18,我将零填充到该数字。将其转换为csv后,数字将作为科学数字修改。是否有可能不将数字转换为科学数字。它在文本列中保持不变。 提前谢谢。
答案 0 :(得分:0)
我打算将此作为评论从上面的内容中添加,但该选项并不适合我,所以我会将其作为答案。
在第一点上,Excel只允许您输入15位有效数字,这就是您最初在结尾处获得零的原因。所以,是的,您必须将列格式化为文本以处理18位数输入。正如Tim Williams指出的那样,虽然格式化决定了你保存的文件的内容(这就是你在Wordpad中打开它时看到正确格式的原因)但是当你在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
这取决于您希望或需要投入多少精力来实现自动化。