重新打开.csv文件会更改0.000E + 00数字格式的值

时间:2017-09-12 07:37:25

标签: excel vba excel-vba csv

我有一个excel文件,其中提取数据,工作表中的A列是一个12位数字,在该列中保存为文本。见下文

[1]

此外我有一个宏构建,因为这个文件将以.csv格式上传到web上,这也需要很少的格式化。其中列转换为0.000E + 00格式,而不是保存为.csv

下面的宏执行所需的格式化并完美地将数字转换为0.000E + 00。 但是当我再次重新打开.csv文件时,数字会被更改

Sub ECRformat()
Dim LR1 As Long
Dim LC1 As Long
Dim rng As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Workbooks.Open Filename:="C:\Users\Apple\Desktop\Salary software - Parikh constructions\Base files shared\ECR-WebUpload.xlsx"
Windows("ECR-WebUpload.xlsx").Activate
Sheets("ECR").Select
Rows("1:1").Select
Selection.Delete

Windows("ECR-WebUpload.xlsx").Activate
Sheets("ECR").Select
LR1 = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LC1 = ActiveSheet.Range("A1").CurrentRegion.Columns.Count

Set rng = Range(Cells(1, 1), Cells(LR1, 1))
rng.Select
With Selection
    .NumberFormat = "0.000E+00"
    .value = .value
End With

Range("A1").Select

ActiveWorkbook.SaveAs Filename:="C:\Users\Apple\Desktop\Salary software - Parikh constructions\Base files shared\ECR-WebUpload.csv", _
    FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

例如:保存为.csv时,100199847300将转换为1.002E + 11 当我重新打开.csv文件时,该值会更改为1.00E + 11并显示100200000000。

2 个答案:

答案 0 :(得分:3)

编辑:将所有以前的修改汇总为一个,并澄清了一些事情。 (感谢Adam让我意识到我不太清楚。)

这就是导入.csv时Excel的行为方式。它将存储为文本的"数字"转换为实数,然后以其认为最佳的方式显示。 (对于12位数字,这是科学记数法。)

如果要以不同方式显示文件,则每次重新打开文件时都必须重新格式化数字。

如果您想要非科学记谱法使用:

.NumberFormat = "0"

或使用完整小数位的科学记数法:

.NumberFormat = "0.00000000000E+00"

但是,如果您希望保存 .csv, 必须 将显示数字格式设置为"0"否则Excel将四舍五入到* *重要位置!使用数字格式"0.00000000000E+00"不会导致舍入,但导致数字存储< / em>用科学记数法。

对于您的特定情况,由于原始Excel文件中的数字存储为文本,您只需要打开文件并保存为&#34; .csv文件,不进行舍入。根本不需要运行宏。

之后,.csv将按照您的预期运行,即在Excel中显示作为科学记数法,同时在记事本中显示真正的非科学值。 如果您没有将数字格式更改为"0",则不会再次将.csv文件保存在Excel中。

*四是Excel使用的默认科学记数法。如果使用自定义科学记数数字格式,则用于舍入的有效位数直接对应于格式。数字也以科学记数法存储。

答案 1 :(得分:1)

所以每个人都在说“这就是Excel遇到一个数字时的表现”......这就错过了这个标记。澄清..

默认情况下,Excel会以科学计数法显示您的12位数字,就像键入网址一样会将您的字符串显示为超链接。

NumberFormat是值的直观表示。

CSV文件存储逗号分隔值,就是这样。您无法应用数字格式并将该数字格式保存在CSV文件中。

如果必须应用数字格式,则必须将其另存为Excel文件以保留格式。

否则,您必须将单元格的VALUE编辑为科学记数法,并将其另存为CSV。

实现这一目标的一种方法是

  1. CUT(CTRL-X)您的数字显示为科学记数法

  2. 将单元格格式化为文本

  3. PASTE到记事本

  4. 然后将其粘贴回Excel。

  5. 另存为CSV

  6. 结果:在记事本中打开CSV文件时,您现在有了科学记数法。

    如果您找到更好的方法,请在下方发表评论。